From: Martin Sebor Date: Thu, 25 Mar 2021 22:08:00 +0000 (-0600) Subject: PR tree-optimization/48483 - Construct from yourself w/o warning X-Git-Tag: basepoints/gcc-12~417 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26e80a496853b21da1886779d97ff613ccb64f9b;p=thirdparty%2Fgcc.git PR tree-optimization/48483 - Construct from yourself w/o warning gcc/testsuite/ChangeLog: PR tree-optimization/48483 * g++.dg/warn/uninit-pr48483.C: New test. --- diff --git a/gcc/testsuite/g++.dg/warn/uninit-pr48483.C b/gcc/testsuite/g++.dg/warn/uninit-pr48483.C new file mode 100644 index 000000000000..41e851388589 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/uninit-pr48483.C @@ -0,0 +1,56 @@ +/* PR tree-optimization/48483 - Construct from yourself w/o warning + { dg-do compile } + { dg-options "-Wall" } */ + +void sink (int); + +struct B +{ + int x; +}; + +struct A +{ + B& b; + A (B &x): b(x) { } +}; + +__attribute__ ((noipa)) void test_c0_O0 () +{ + A a (a.b); // { dg-warning "'a.A::b' is used uninitialized" } + sink (a.b.x); +} + +__attribute__ ((noipa)) int test_c3_O0 (void) +{ + struct S { int a; } s; + return s.a; // { dg-warning "s.test_c3_O0\\\(\\\)::S::a' is used uninitialized" } +} + +#pragma GCC optimize ("1") + +__attribute__ ((noipa)) void test_c0_O1 () +{ + A a (a.b); // { dg-warning "'a.A::b' is used uninitialized" } + sink (a.b.x); +} + +__attribute__ ((noipa)) int test_c3_O1 (void) +{ + struct S { int a; } s; + return s.a; // { dg-warning "s.test_c3_O1\\\(\\\)::S::a' is used uninitialized" } +} + +#pragma GCC optimize ("2") + +__attribute__ ((noipa)) void test_c0_O2 () +{ + A a (a.b); // { dg-warning "'a.A::b' is used uninitialized" } + sink (a.b.x); +} + +__attribute__ ((noipa)) int test_c3_O2 (void) +{ + struct S { int a; } s; + return s.a; // { dg-warning "s.test_c3_O2\\\(\\\)::S::a' is used uninitialized" } +}