This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/20968] New: [4.0/4.1 Regression] Spurious "may be used uninitialized" warning

struct {int count;} *v1;
int c;
int k;

extern void baz(int);

static int bar(int *j)
    if (k == 4)
	*j = 1;
	return 1;
    return 0;

void foo(void)
    int i;

    if (!bar(&i))
	if (!c)
    if (!c)

produces this warning when compiled with "-Wall -O2":

$ gcc-4.0.0-RC1 -Wall -O2 -c final.c
final.c: In function ?foo?:
final.c:18: warning: ?i? may be used uninitialized in this function

GCC 3.4.3 and previous versions I tested did not generate this warning.

I believe this warning is improper because one of these two scenarios must be true:

1) k == 4, in which case i is initialized before it can be used
2) k != 4, in which case i is not used

Adding -fno-inline avoids the warning by preventing bar from being inlined into foo.

I was unable to reduce the test case further without making the warning
disappear.  In particular, removing the increment of v1->count makes the warning

This is GCC 4.0.0 RC1:
$ gcc-4.0.0-RC1 -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../gcc-4.0.0-20050410/configure --program-suffix=-4.0.0-RC1
Thread model: posix
gcc version 4.0.0 20050410 (prerelease)

This warning still appears on mainline.

           Summary: [4.0/4.1 Regression] Spurious "may be used
                    uninitialized" warning
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: James dot Juran at baesystems dot com
                CC: gcc-bugs at gcc dot gnu dot org

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]