diff options
author | Richard Biener <rguenther@suse.de> | 2022-08-26 12:56:30 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-08-26 12:59:05 +0200 |
commit | fc1b5707faf0b607da06e9ec3437245aba69a255 (patch) | |
tree | 97bcd43807fb9fc80bdbe7a235a48e909b9e94a3 /gcc | |
parent | d6621a2f3176dd6a593d4f5fa7f85db0234b40d2 (diff) | |
download | gcc-fc1b5707faf0b607da06e9ec3437245aba69a255.zip gcc-fc1b5707faf0b607da06e9ec3437245aba69a255.tar.gz gcc-fc1b5707faf0b607da06e9ec3437245aba69a255.tar.bz2 |
New testcase for uninit
The following adds a testcase that illustrates a defect in
compute_control_dep_chain and its attempt to identify loop
exits as special to continue walking post-dominators but failing
to do so for following post-dominators. On trunk there is now
simple_control_dep_chain saving the day, avoiding the false
positive but with GCC 12 we get a bogus diagnostic.
* gcc.dg/uninit-pred-11.c: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/uninit-pred-11.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/uninit-pred-11.c b/gcc/testsuite/gcc.dg/uninit-pred-11.c new file mode 100644 index 0000000..734df37 --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pred-11.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O -Wmaybe-uninitialized" } */ + +extern unsigned bar (void); +extern void quux (void); +int z; +unsigned foo (unsigned v, int y) +{ + unsigned u; + if (v != 1) + u = bar (); + + // Prevent the "dom" pass from changing the CFG layout based on the inference + // 'if (v != 1) is false then (v != 2) is true'. (Now it would have to + // duplicate the loop in order to do so, which is deemed expensive.) + for (int i = 0; i < 10; i++) + quux (); + + // This variation from uninit-25.c causes compute_control_dep_chain + // to run into a defect but simple_control_dep_chain saves us here + if (y) + z = 1; + if (v != 1) + return u; /* { dg-bogus "may be used uninitialized" } */ + + return 0; +} |