From: Martin Sebor Date: Fri, 26 Mar 2021 22:37:34 +0000 (-0600) Subject: PR tree-optimization/59970 - Bogus -Wmaybe-uninitialized at low optimization levels X-Git-Tag: basepoints/gcc-12~388 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=980b12cc81979e52f491bf0dfe961d30c07fe864;p=thirdparty%2Fgcc.git PR tree-optimization/59970 - Bogus -Wmaybe-uninitialized at low optimization levels PR tree-optimization/59970 * gcc.dg/uninit-pr59970.c: New test. --- diff --git a/gcc/testsuite/gcc.dg/uninit-pr59970.c b/gcc/testsuite/gcc.dg/uninit-pr59970.c new file mode 100644 index 000000000000..145af657a76c --- /dev/null +++ b/gcc/testsuite/gcc.dg/uninit-pr59970.c @@ -0,0 +1,79 @@ +/* PR tree-optimization/59970 - Bogus -Wmaybe-uninitialized at low optimization + levels + { dg-do compile } + { dg-options "-Wall" } */ + +#pragma GCC push_options +#pragma GCC optimize ("1") + +__attribute__ ((noipa)) int +d_demangle_callback_O1 (const char *mangled) +{ + enum { DCT_TYPE, DCT_GLOBAL_DTORS } type; + int dc; + + /* Fails for -Og and -O1. */ + if (mangled) + type = DCT_GLOBAL_DTORS; + else + type = DCT_TYPE; + + /* If both cases assign the same value, all is fine. */ + switch (type) + { + case DCT_TYPE: + dc = 0 /* 1 */; + break; + case DCT_GLOBAL_DTORS: + dc = /* 0 */ 1; + break; + + /* If this is added, all is fine. */ +#ifdef ABORT + default: + __builtin_unreachable (); +#endif + } + + return dc; // { dg-bogus "uninitialized" } +} + +#pragma GCC pop_options + + +#pragma GCC optimize ("Og") + +__attribute__ ((noipa)) int +d_demangle_callback_Og (const char *mangled) +{ + enum { DCT_TYPE, DCT_GLOBAL_DTORS } type; + int dc; + + /* Fails for -Og. */ + /* Removing either the function call or the array dereference, it'll be like + the TOGGLE1 case. */ + extern int cmp (void); + if (cmp () && mangled[0]) + type = DCT_GLOBAL_DTORS; + else + type = DCT_TYPE; + + /* If both cases assign the same value, all is fine. */ + switch (type) + { + case DCT_TYPE: + dc = 0 /* 1 */; + break; + case DCT_GLOBAL_DTORS: + dc = /* 0 */ 1; + break; + + /* If this is added, all is fine. */ +#ifdef ABORT + default: + __builtin_unreachable (); +#endif + } + + return dc; // { dg-bogus "uninitialized" } +}