On Fri, Jan 12, 2018 at 06:08:55PM +0100, Jakub Jelinek wrote: > It is true that in my log file I don't have any cases where in C > it was first TREE_CONSTANT and turned into is_gimple_constant, but that > doesn't mean it isn't possible. > > Looking at a random testcase, it is > #0 gimplify_one_sizepos(tree_node**, gimple**) () at > ../../gcc/gimplify.c:12572 > #1 0x000000000097f78d in gnat_gimplify_expr(tree_node**, gimple**, gimple**) > () at ../../gcc/ada/gcc-interface/trans.c:8465 > #2 0x0000000000ecf638 in gimplify_expr(tree_node**, gimple**, gimple**, bool > (*)(tree_node*), int) () at ../../gcc/gimplify.c:11343 > #3 0x0000000000ed4087 in gimplify_stmt (stmt_p=<optimized out>, > seq_p=seq_p@entry=0x7fffffffd880) at ../../gcc/gimplify.c:6658 > #4 0x0000000000ed0f9c in gimplify_statement_list (pre_p=0x7fffffffd880, > expr_p=0x7fffef8fd380) at ../../gcc/tree-iterator.h:86
Apparently it isn't the only one where we can have a REAL_CST, another one is gimplify_type_sizes: switch (TREE_CODE (type)) { case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: case REAL_TYPE: case FIXED_POINT_TYPE: gimplify_one_sizepos (&TYPE_MIN_VALUE (type), list_p); gimplify_one_sizepos (&TYPE_MAX_VALUE (type), list_p); So, what about this patch instead? No effect at all for any language during bootstrap/regtest other than C, where it does something for: 96 64 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/bounds-1.c main get_initialized_tmp_var 96 32 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/bounds-1.c main get_initialized_tmp_var 48 64 /home/jakub/src/gcc/gcc/testsuite/gcc.c-torture/compile/20000923-1.c foo get_initialized_tmp_var 48 32 /home/jakub/src/gcc/gcc/testsuite/gcc.c-torture/compile/20000923-1.c foo get_initialized_tmp_var 42 64 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/vla-2.c main get_initialized_tmp_var 42 32 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/vla-2.c main get_initialized_tmp_var 35 64 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c DrawChunk get_initialized_tmp_var 35 64 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c Run get_initialized_tmp_var 35 64 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/asan/clone-test-1.c main get_initialized_tmp_var 35 32 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/ubsan/pr71512-1.c DrawChunk get_initialized_tmp_var 35 32 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/asan/swapcontext-test-1.c Run get_initialized_tmp_var 35 32 /home/jakub/src/gcc/gcc/testsuite/c-c++-common/asan/clone-test-1.c main get_initialized_tmp_var 20 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/c99-const-expr-12.c f get_initialized_tmp_var 20 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/c99-const-expr-12.c f get_initialized_tmp_var 17 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/enum-incomplete-3.c foo get_initialized_tmp_var 17 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/enum-incomplete-3.c foo get_initialized_tmp_var 10 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/combined-directives-1.c main get_initialized_tmp_var 10 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr25682.c foo get_initialized_tmp_var 10 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/combined-directives-1.c main get_initialized_tmp_var 10 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr25682.c foo get_initialized_tmp_var 8 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/graphite/isl-ast-gen-user-1.c main get_initialized_tmp_var 8 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/gomp/pr47963.c foo get_initialized_tmp_var 8 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/gomp/pr47963.c foo get_initialized_tmp_var 7 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/array-5.c func get_initialized_tmp_var 7 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/array-5.c func get_initialized_tmp_var 6 64 ../../../../libgomp/testsuite/libgomp.c/examples-4/target_data-3.c main get_initialized_tmp_var 6 32 ../../../../libgomp/testsuite/libgomp.c/examples-4/target_data-3.c main get_initialized_tmp_var 5 64 /tmp/cgo-gcc-input-804501794.c testSendSIG get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/zero_length_subarrays.c main get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-4.c test_reductions get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-3.c test_reductions_minmax get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-3.c test_reductions get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-2.c test_reductions_minmax get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-2.c test_reductions get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions_minmax get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions_bool get_initialized_tmp_var 5 64 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/pr70688.c main get_initialized_tmp_var 5 64 issue3250.cgo2.c testSendSIG get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.target/i386/stack-check-18.c f2 get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr50527.c main get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr47086.c foo get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr44545.c DrawChunk get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr43513.c foo3 get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/graphite/pr83277.c wv get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/graphite/pr83255.c main get_initialized_tmp_var 5 64 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/c90-const-expr-6.c f get_initialized_tmp_var 5 32 /tmp/cgo-gcc-input-988339533.c testSendSIG get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/zero_length_subarrays.c main get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-4.c test_reductions get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-3.c test_reductions_minmax get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-3.c test_reductions get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-2.c test_reductions_minmax get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-2.c test_reductions get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions_minmax get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/reduction-1.c test_reductions_bool get_initialized_tmp_var 5 32 ../../../../libgomp/testsuite/libgomp.oacc-c/../libgomp.oacc-c-c++-common/pr70688.c main get_initialized_tmp_var 5 32 issue3250.cgo2.c testSendSIG get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.target/i386/stack-check-18.c f2 get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr50527.c main get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr47086.c foo get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr44545.c DrawChunk get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/pr43513.c foo3 get_initialized_tmp_var 5 32 /home/jakub/src/gcc/gcc/testsuite/gcc.dg/c90-const-expr-6.c f get_initialized_tmp_var i.e. all cases where we have a const int/size_t etc. bound for a VLA. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2018-01-13 Jakub Jelinek <ja...@redhat.com> Richard Biener <rgue...@suse.de> PR libgomp/83590 * gimplify.c (gimplify_one_sizepos): Make sure gimplify_one_sizepos doesn't turn something previously non-INTEGER_CST into INTEGER_CST. --- gcc/gimplify.c.jj 2018-01-11 20:34:15.373975356 +0100 +++ gcc/gimplify.c 2018-01-12 13:57:21.153274727 +0100 @@ -12570,6 +12570,15 @@ gimplify_one_sizepos (tree *expr_p, gimp /* SSA names in decl/type fields are a bad idea - they'll get reclaimed if the def vanishes. */ gimplify_expr (expr_p, stmt_p, NULL, is_gimple_val, fb_rvalue, false); + + /* If expr wasn't already is_gimple_sizepos from the FE, ensure that it + is a VAR_DECL, otherwise we might handle some decls as gimplify_vla_decl + even when they would have all sizes INTEGER_CSTs. Don't do this if + expr is a gimple constant and remains the same kind of constant after + gimplification, perhaps with overflows removed, as gimplify_one_sizepos + is also used for floating point minimum/maximum. */ + if (is_gimple_constant (*expr_p) && TREE_CODE (*expr_p) != TREE_CODE (expr)) + *expr_p = get_initialized_tmp_var (*expr_p, stmt_p, NULL, false); } /* Gimplify the body of statements of FNDECL and return a GIMPLE_BIND node Jakub