diff options
author | Richard Guenther <rguenther@suse.de> | 2011-12-06 13:26:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-12-06 13:26:09 +0000 |
commit | f7fb28800dea7ac262424262b3ada1acd9bb8d07 (patch) | |
tree | 345ea4ddcc6a7538d7ce16b7722a60aa7d081fd9 /gcc | |
parent | 52f26be4091ee44b2f6407d44c05c310917f2465 (diff) | |
download | gcc-f7fb28800dea7ac262424262b3ada1acd9bb8d07.zip gcc-f7fb28800dea7ac262424262b3ada1acd9bb8d07.tar.gz gcc-f7fb28800dea7ac262424262b3ada1acd9bb8d07.tar.bz2 |
re PR lto/50601 (New LTO failures)
2011-12-06 Richard Guenther <rguenther@suse.de>
PR middle-end/50601
* varasm.c (assemble_alias): Move DECL_EXTERNAL implementation
quirk adjustjment ...
* passes.c (rest_of_decl_compilation): ... here.
From-SVN: r182048
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/passes.c | 5 | ||||
-rw-r--r-- | gcc/varasm.c | 9 |
3 files changed, 12 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76c8b18..f0cb27a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2011-12-06 Richard Guenther <rguenther@suse.de> + PR middle-end/50601 + * varasm.c (assemble_alias): Move DECL_EXTERNAL implementation + quirk adjustjment ... + * passes.c (rest_of_decl_compilation): ... here. + +2011-12-06 Richard Guenther <rguenther@suse.de> + PR middle-end/51436 * gimple-fold.c (gimplify_and_update_call_from_tree): Guard vdef check for the fact we do not have virtual operands when diff --git a/gcc/passes.c b/gcc/passes.c index a351241..d060bb4 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -156,6 +156,11 @@ rest_of_decl_compilation (tree decl, { alias = TREE_VALUE (TREE_VALUE (alias)); alias = get_identifier (TREE_STRING_POINTER (alias)); + /* A quirk of the initial implementation of aliases required that the + user add "extern" to all of them. Which is silly, but now + historical. Do note that the symbol is in fact locally defined. */ + if (!lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))) + DECL_EXTERNAL (decl) = 0; assemble_alias (decl, alias); } } diff --git a/gcc/varasm.c b/gcc/varasm.c index 8d55548..78dc4cd 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5794,14 +5794,11 @@ void assemble_alias (tree decl, tree target) { tree target_decl; - bool is_weakref = false; if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))) { tree alias = DECL_ASSEMBLER_NAME (decl); - is_weakref = true; - ultimate_transparent_alias_target (&target); if (alias == target) @@ -5839,12 +5836,6 @@ assemble_alias (tree decl, tree target) } TREE_USED (decl) = 1; - /* A quirk of the initial implementation of aliases required that the user - add "extern" to all of them. Which is silly, but now historical. Do - note that the symbol is in fact locally defined. */ - if (! is_weakref) - DECL_EXTERNAL (decl) = 0; - /* Allow aliases to aliases. */ if (TREE_CODE (decl) == FUNCTION_DECL) cgraph_get_create_node (decl)->alias = true; |