cgraphbuild.c (record_reference): Canonicalize constructor values.
* cgraphbuild.c (record_reference): Canonicalize constructor values. * gimple-fold.c (canonicalize_constructor_val): Accept being called without function context. * cgraphunit.c (cgraph_finalize_compilation_unit): Clear current_function_decl and cfun. From-SVN: r171903
This commit is contained in:
parent
91f2fae8cc
commit
0038d4e090
@ -1,3 +1,12 @@
|
||||
2011-04-03 Michael Matz <matz@suse.de>
|
||||
|
||||
* cgraphbuild.c (record_reference): Canonicalize constructor
|
||||
values.
|
||||
* gimple-fold.c (canonicalize_constructor_val): Accept being called
|
||||
without function context.
|
||||
* cgraphunit.c (cgraph_finalize_compilation_unit): Clear
|
||||
current_function_decl and cfun.
|
||||
|
||||
2011-04-03 Michael Matz <matz@suse.de>
|
||||
|
||||
* tree.c (decl_init_priority_insert): Don't create entry for
|
||||
|
@ -53,6 +53,12 @@ record_reference (tree *tp, int *walk_subtrees, void *data)
|
||||
tree decl;
|
||||
struct record_reference_ctx *ctx = (struct record_reference_ctx *)data;
|
||||
|
||||
t = canonicalize_constructor_val (t);
|
||||
if (!t)
|
||||
t = *tp;
|
||||
else if (t != *tp)
|
||||
*tp = t;
|
||||
|
||||
switch (TREE_CODE (t))
|
||||
{
|
||||
case VAR_DECL:
|
||||
|
@ -1066,6 +1066,11 @@ cgraph_finalize_compilation_unit (void)
|
||||
{
|
||||
timevar_push (TV_CGRAPH);
|
||||
|
||||
/* If we're here there's no current function anymore. Some frontends
|
||||
are lazy in clearing these. */
|
||||
current_function_decl = NULL;
|
||||
set_cfun (NULL);
|
||||
|
||||
/* Do not skip analyzing the functions if there were errors, we
|
||||
miss diagnostics for following functions otherwise. */
|
||||
|
||||
|
@ -106,7 +106,7 @@ can_refer_decl_in_current_unit_p (tree decl)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* CVAL is value taken from DECL_INITIAL of variable. Try to transorm it into
|
||||
/* CVAL is value taken from DECL_INITIAL of variable. Try to transform it into
|
||||
acceptable form for is_gimple_min_invariant. */
|
||||
|
||||
tree
|
||||
@ -131,10 +131,9 @@ canonicalize_constructor_val (tree cval)
|
||||
|| TREE_CODE (base) == FUNCTION_DECL)
|
||||
&& !can_refer_decl_in_current_unit_p (base))
|
||||
return NULL_TREE;
|
||||
if (base && TREE_CODE (base) == VAR_DECL)
|
||||
if (cfun && base && TREE_CODE (base) == VAR_DECL)
|
||||
add_referenced_var (base);
|
||||
/* We never have the chance to fixup types in global initializers
|
||||
during gimplification. Do so here. */
|
||||
/* Fixup types in global initializers. */
|
||||
if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
|
||||
cval = build_fold_addr_expr (TREE_OPERAND (cval, 0));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user