re PR tree-optimization/16443 (ICE during linux kernel compilation)
PR tree-optimization/16443 * tree-ssa-alias.c: Add more description for CALL_CLOBBERED_VARS and ADDRESSABLE_VARS. * tree-ssa-operands.c (get_asm_expr_operands): Re-order the clobbering of call-clobbered and addressable variables. If there are any before aliases have been computed, add them. testsuite/ChangeLog PR tree-optimization/16443 * gcc.dg/tree-ssa/20040713-1.c: New test. From-SVN: r84641
This commit is contained in:
parent
a65ab52456
commit
ee536902d6
@ -1,3 +1,12 @@
|
||||
2004-07-13 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR tree-optimization/16443
|
||||
* tree-ssa-alias.c: Add more description for
|
||||
CALL_CLOBBERED_VARS and ADDRESSABLE_VARS.
|
||||
* tree-ssa-operands.c (get_asm_expr_operands): Re-order the
|
||||
clobbering of call-clobbered and addressable variables. If
|
||||
there are any before aliases have been computed, add them.
|
||||
|
||||
2004-07-13 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
* tree-optimize.c (execute_todo): Flush DUMP_FILE before
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-07-13 Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
PR tree-optimization/16443
|
||||
* gcc.dg/tree-ssa/20040713-1.c: New test.
|
||||
|
||||
2004-07-15 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* g++.dg/lookup/new2.C: Use first operand of type __SIZE_TYPE__
|
||||
|
18
gcc/testsuite/gcc.dg/tree-ssa/20040713-1.c
Normal file
18
gcc/testsuite/gcc.dg/tree-ssa/20040713-1.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
|
||||
/* Extracted from PR 16443. Contributed by Volker Reichelt.
|
||||
Scanning of __asm__ operands wasn't considering call-clobbered
|
||||
variables discovered before the aliasing pass. This was causing a
|
||||
crash in verify_ssa() because 'p' was not being given an SSA_NAME. */
|
||||
|
||||
void foo(char *p)
|
||||
{
|
||||
__asm__ ("" ::: "memory");
|
||||
}
|
||||
|
||||
void bar()
|
||||
{
|
||||
static char *p;
|
||||
foo(p);
|
||||
}
|
@ -164,7 +164,12 @@ static struct ptr_info_def *get_ptr_info (tree t);
|
||||
bitmap call_clobbered_vars;
|
||||
|
||||
/* Addressable variables in the function. If bit I is set, then
|
||||
REFERENCED_VARS (I) has had its address taken. */
|
||||
REFERENCED_VARS (I) has had its address taken. Note that
|
||||
CALL_CLOBBERED_VARS and ADDRESSABLE_VARS are not related. An
|
||||
addressable variable is not necessarily call-clobbered (e.g., a
|
||||
local addressable whose address does not escape) and not all
|
||||
call-clobbered variables are addressable (e.g., a local static
|
||||
variable). */
|
||||
bitmap addressable_vars;
|
||||
|
||||
/* 'true' after aliases have been computed (see compute_may_aliases). This
|
||||
|
@ -1231,16 +1231,6 @@ get_asm_expr_operands (tree stmt, voperands_t prev_vops)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
/* If we still have not computed aliasing information, we
|
||||
won't know what variables are call-clobbered and/or
|
||||
addressable. Just mark the statement as having volatile
|
||||
operands for now. */
|
||||
if (!aliases_computed_p)
|
||||
{
|
||||
stmt_ann (stmt)->has_volatile_ops = true;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Clobber all call-clobbered variables (or .GLOBAL_VAR if we
|
||||
decided to group them). */
|
||||
if (global_var)
|
||||
@ -1259,6 +1249,13 @@ get_asm_expr_operands (tree stmt, voperands_t prev_vops)
|
||||
add_stmt_operand (&var, stmt, opf_is_def, prev_vops);
|
||||
});
|
||||
|
||||
/* If we don't have call-clobbered nor addressable vars and we
|
||||
still have not computed aliasing information, just mark the
|
||||
statement as having volatile operands. If the alias pass
|
||||
finds some, we will add them at that point. */
|
||||
if (!aliases_computed_p)
|
||||
stmt_ann (stmt)->has_volatile_ops = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user