mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 07:06:48 +08:00
*** empty log message ***
From-SVN: r70573
This commit is contained in:
parent
ab3d4713ce
commit
02a2edc088
@ -412,6 +412,11 @@ int warn_main;
|
||||
|
||||
int warn_sequence_point;
|
||||
|
||||
/* Nonzero means warn about uninitialized variable when it is initialized with itself.
|
||||
For example: int i = i;, GCC will not warn about this when warn_init_self is nonzero. */
|
||||
|
||||
int warn_init_self;
|
||||
|
||||
/* Nonzero means to warn about compile-time division by zero. */
|
||||
int warn_div_by_zero = 1;
|
||||
|
||||
@ -5729,4 +5734,35 @@ c_estimate_num_insns (tree decl)
|
||||
return num;
|
||||
}
|
||||
|
||||
/* Used by c_decl_uninit to find where expressions like x = x + 1; */
|
||||
|
||||
static tree
|
||||
c_decl_uninit_1 (tree *t, int *walk_sub_trees, void *x)
|
||||
{
|
||||
/* If x = EXP(&x)EXP, then do not warn about the use of x. */
|
||||
if (TREE_CODE (*t) == ADDR_EXPR && TREE_OPERAND (*t, 0) == x)
|
||||
{
|
||||
*walk_sub_trees = 0;
|
||||
return NULL_TREE;
|
||||
}
|
||||
if (*t == x)
|
||||
return *t;
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
/* Find out if a variable is uninitialized based on DECL_INITIAL. */
|
||||
|
||||
bool
|
||||
c_decl_uninit (tree t)
|
||||
{
|
||||
/* int x = x; is GCC extension to turn off this warning, only if warn_init_self is zero. */
|
||||
if (DECL_INITIAL (t) == t)
|
||||
return warn_init_self ? true : false;
|
||||
|
||||
/* Walk the trees looking for the variable itself. */
|
||||
if (walk_tree_without_duplicates (&DECL_INITIAL (t), c_decl_uninit_1, t))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
#include "gt-c-common.h"
|
||||
|
9
gcc/testsuite/gcc.dg/uninit-D.c
Normal file
9
gcc/testsuite/gcc.dg/uninit-D.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* Test we do not warn about initializing variable with self. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -Wuninitialized" } */
|
||||
|
||||
int f()
|
||||
{
|
||||
int i = i;
|
||||
return i;
|
||||
}
|
9
gcc/testsuite/gcc.dg/uninit-E.c
Normal file
9
gcc/testsuite/gcc.dg/uninit-E.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* Test we do warn about initializing variable with self when -Winit-self is supplied. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -Wuninitialized -Winit-self" } */
|
||||
|
||||
int f()
|
||||
{
|
||||
int i = i;
|
||||
return i;
|
||||
}
|
9
gcc/testsuite/gcc.dg/uninit-F.c
Normal file
9
gcc/testsuite/gcc.dg/uninit-F.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* Test we do warn about initializing variable with self in the initialization. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -Wuninitialized" } */
|
||||
|
||||
int f()
|
||||
{
|
||||
int i = i + 1; /* { dg-warning "i" "uninitialized variable warning" } */
|
||||
return i;
|
||||
}
|
9
gcc/testsuite/gcc.dg/uninit-G.c
Normal file
9
gcc/testsuite/gcc.dg/uninit-G.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* Test we do not warn about initializing variable with address of self in the initialization. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -Wuninitialized" } */
|
||||
|
||||
void *f()
|
||||
{
|
||||
void *i = &i;
|
||||
return i;
|
||||
}
|
Loading…
Reference in New Issue
Block a user