diff options
author | Andrew Pinski <apinski@cavium.com> | 2017-07-25 17:17:46 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2017-07-25 10:17:46 -0700 |
commit | 6d20bf1870484e659b3cb744ee627dafc902b491 (patch) | |
tree | cdaddc7c631c819d11c4bdbc84936697d50fc29c /gcc/tree-ssa-uninit.c | |
parent | 50ca694de2a2f3ffc7583f53c6a1c1e0f40c5045 (diff) | |
download | gcc-6d20bf1870484e659b3cb744ee627dafc902b491.zip gcc-6d20bf1870484e659b3cb744ee627dafc902b491.tar.gz gcc-6d20bf1870484e659b3cb744ee627dafc902b491.tar.bz2 |
tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory accesses where the use is for the first operand of a...
2017-07-25 Andrew Pinski <apinski@cavium.com>
* tree-ssa-uninit.c (warn_uninitialized_vars): Don't warn about memory
accesses where the use is for the first operand of a BIT_INSERT.
From-SVN: r250530
Diffstat (limited to 'gcc/tree-ssa-uninit.c')
-rw-r--r-- | gcc/tree-ssa-uninit.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/tree-ssa-uninit.c b/gcc/tree-ssa-uninit.c index b587599..67f0d84 100644 --- a/gcc/tree-ssa-uninit.c +++ b/gcc/tree-ssa-uninit.c @@ -273,6 +273,11 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized) && gimple_has_location (stmt)) { tree rhs = gimple_assign_rhs1 (stmt); + tree lhs = gimple_assign_lhs (stmt); + bool has_bit_insert = false; + use_operand_p luse_p; + imm_use_iterator liter; + if (TREE_NO_WARNING (rhs)) continue; @@ -300,6 +305,26 @@ warn_uninitialized_vars (bool warn_possibly_uninitialized) ref.offset) <= 0))) continue; + /* Do not warn if the access is then used for a BIT_INSERT_EXPR. */ + if (TREE_CODE (lhs) == SSA_NAME) + FOR_EACH_IMM_USE_FAST (luse_p, liter, lhs) + { + gimple *use_stmt = USE_STMT (luse_p); + /* BIT_INSERT_EXPR first operand should not be considered + a use for the purpose of uninit warnings. */ + if (gassign *ass = dyn_cast <gassign *> (use_stmt)) + { + if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR + && luse_p->use == gimple_assign_rhs1_ptr (ass)) + { + has_bit_insert = true; + break; + } + } + } + if (has_bit_insert) + continue; + /* Limit the walking to a constant number of stmts after we overcommit quadratic behavior for small functions and O(n) behavior. */ |