Hi! In this case, when a compound literal is in the parameter scope of a nested function, current_function_decl is non-NULL, but we still don't want to pushdecl it, as the code doesn't expect any VAR_DECLs etc. in parameter scope.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2019-01-28 Jakub Jelinek <ja...@redhat.com> PR c/89045 * c-decl.c (build_compound_literal): Don't pushdecl if in parameter scope. * gcc.dg/pr89045.c: New test. --- gcc/c/c-decl.c.jj 2019-01-27 12:55:16.714550950 +0100 +++ gcc/c/c-decl.c 2019-01-28 15:36:29.579811998 +0100 @@ -5512,7 +5512,7 @@ build_compound_literal (location_t loc, pushdecl (decl); rest_of_decl_compilation (decl, 1, 0); } - else if (current_function_decl) + else if (current_function_decl && !current_scope->parm_flag) pushdecl (decl); if (non_const) --- gcc/testsuite/gcc.dg/pr89045.c.jj 2019-01-28 15:41:16.623104584 +0100 +++ gcc/testsuite/gcc.dg/pr89045.c 2019-01-28 15:43:18.333108582 +0100 @@ -0,0 +1,15 @@ +/* PR c/89045 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +int +foo (int x) +{ + int v[(int){ x }]; + v[0] = 0; + int bar (int p[(int){ x }]) + { + return p[0]; + } + return bar (v); +} Jakub