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 <[email protected]>
Richard Biener <[email protected]>
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