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]

[RFC] PR middle-end/179 gcc -O2 -Wuninitialized missing warning with &var

This is an initial attempt to handle VOPs in -Wuninitialized. Taking
the address of a variable messes up uninitialized warnings because
VOPs are completely ignored. The following patch tries to detect one
particular case []:

extern void foo (int *);
extern void bar (int);

baz (void)
  int i;
  if (i) /* { dg-warning "uninit" "uninit i warning" { xfail *-*-* } } */
    bar (i);
  foo (&i);

For this example we create something like:

baz (void) {
 intD.0 iD.1283;
 intD.0 i.0D.1284;

 # BLOCK 0, starting at line 7
 # PRED: ENTRY (fallthru)
 #   VUSE <iD.1283_1>;
 i.0D.1284_2 = iD.1283;

And that is exactly what the new code tries to detect. I try hard to
ignore every other case because they generate false positives while

Any comments? Can we do this better? Can the new code give false positives?

Bootstrapped and regression tested on x86_64-unknown-linux-gnu with

2008-08-11  Manuel Lopez-Ibanez  <>

	PR middle-end/179
	* tree-ssa.c (ssa_maybe_uninitialized_var_p): New function.
	(warn_uninit): Detect VUSE o uninitialized variable.
	* gcc.dg/uninit-B.c (baz): Remove XFAIL.
	(baz2): Corresponding negative test.
	* gcc.dg/uninit-pr19430-O0.c: New.
	* gcc.dg/uninit-pr19430.c: New.

Attachment: fix-pr179-try4.diff
Description: Text document

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