[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086 Martin Sebor changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED CC||msebor at gcc dot gnu.org Resolution|--- |DUPLICATE --- Comment #6 from Martin Sebor --- I think it would be reasonable to issue a warning on the code in comment #3 (perhaps under -Wmaybe-uninitialized rather than -Wuninitialized). For uninitialized variables passed by reference to pure functions (that cannot change objects pointed to by their arguments) I think it would make sense to issue -Wunitialized. Based on comment #4 and on my understanding of the two reports resolving as a duplicate of bug 10138. *** This bug has been marked as a duplicate of bug 10138 ***
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
--- Comment #5 from manu at gcc dot gnu dot org 2007-08-20 14:47 --- Andrew, what about functions marked with attribute "pure" ? int atoi(const char *) __attribute__ ((pure)); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
--- Comment #4 from manu at gcc dot gnu dot org 2007-08-17 10:15 --- (In reply to comment #3) > > void use(const int *a) > { > int *b = (int*)a; Andrew, you are right. I tend to forget how fragile is 'const', even in C++. So, then this is invalid and thus it is PR10138. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
--- Comment #3 from pinskia at gcc dot gnu dot org 2007-08-16 14:58 --- void use(const int *a) { int *b = (int*)a; b[0] = 5; } void foo(void) { int i; use(&i); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
--- Comment #2 from manu at gcc dot gnu dot org 2007-08-16 11:19 --- (In reply to comment #1) > > At least for languages where 'const' is actually enforced > > There is none, void use(const int *a) { a[0] = 5; } void foo(void) { int i; use(&i); } new.c:3: error: assignment of read-only location Either I am misunderstanding you or your argument about overwriting the pointer argument is equivalent to just don't using the value of 'i'. Of course, we don't know whether the value is used or not within use() but the fact is that 'i' cannot be initialized within use(). -- manu at gcc dot gnu dot org changed: What|Removed |Added CC||manu at gcc dot gnu dot org Priority|P5 |P3 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
-- pinskia at gcc dot gnu dot org changed: What|Removed |Added CC||pinskia at gcc dot gnu dot ||org Priority|P3 |P5 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086
[Bug middle-end/33086] warn for read-only uninitialized variables passed as arguments
--- Comment #1 from pinskia at gcc dot gnu dot org 2007-08-16 10:59 --- > At least for languages where 'const' is actually enforced There is none, unless you are taking about fortran "in" arguments. So we need to mark such argument as special. Now if you have the full program (or at least the containts of use function), and you can prove it never writes to the incoming pointer argument, then you can warn but only then. In C and C++ you can never tell without the body of use. -- pinskia at gcc dot gnu dot org changed: What|Removed |Added OtherBugsDependingO|24639 | nThis|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33086