This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/10138] warn for uninitialized arrays passed as const* arguments
- From: "manu at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Aug 2007 17:12:03 -0000
- Subject: [Bug middle-end/10138] warn for uninitialized arrays passed as const* arguments
- References: <bug-10138-1038@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #20 from manu at gcc dot gnu dot org 2007-08-20 17:12 -------
(In reply to comment #19)
>
> What if you had "const int i=0"? As I said before, use() may do a const-cast
> to get rid of the constness of its argument, but the result is only
> well-defined
> if the object pointed to is actually non-const. That is the case here, so use()
> may do exactly this and clobber 'i'. On the other hand, if 'i' was const, then
> the result of any const-cast use() may do on its argument are undefined, and
> it would seem legitimate to propagate the initial value of 'i' into the call
> to foo().
>
Wolfgang, I understand perfectly what you explain. Yet, from the point of view
of Wuninitialized, only local non-const objects are interesting. And it seems
that for those, GCC does not assume that the function is not going to modify
the object. Thus, it doesn't make much sense for Wuninitialized to assume it.
And, from a technical point of view, it would be difficult to maintain such
dichotomy, since Wuninitialized relies on the SSA representation and the work
of the optimisation passes.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10138