/* PR middle-end/98871 - Cannot silence -Wmaybe-uninitialized at declaration site { dg-do compile } { dg-options "-O1 -Wall" } */ struct A { int x; }; // Verify that suppression works at every inlining level. static int f0 (int *x) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" return ++*x; #pragma GCC diagnostic pop } static int f1 (int *p, int n) { struct A a; for (int i = 0; i < n; ++i) { if (p[i] > 1) { a = (struct A){p[i]}; } } return f0 (&a.x); } int f2 (void) { int a[] = { 1, 2, 3, 4 }; return f1 (a, 4); } static int g0 (int *x) { return ++*x; } static int g1 (int *p, int n) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" struct A a; for (int i = 0; i < n; ++i) { if (p[i] > 1) { a = (struct A){p[i]}; } } return g0 (&a.x); #pragma GCC diagnostic pop } int g2 (void) { int a[] = { 1, 2, 3, 4, 5 }; return g1 (a, 5); } static int h0 (int *x) { return ++*x; } static int h1 (int *p, int n) { struct A a; for (int i = 0; i < n; ++i) { if (p[i] > 1) { a = (struct A){p[i]}; } } return h0 (&a.x); } int h2 (void) { int a[] = { 1, 2, 3, 4, 5, 6 }; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" return h1 (a, 6); #pragma GCC diagnostic pop }