diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2014-01-17 15:19:55 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2014-01-17 15:19:55 +0100 |
commit | 24fcf4bc0c6ac701e9c2e1ae1f92908c50afd11f (patch) | |
tree | bd04cfe221b6a7872473a45586f7dbaa7922f5c3 /gcc/passes.c | |
parent | d4f283a153449eb77df3fe4083538b5f191a6b38 (diff) | |
download | gcc-24fcf4bc0c6ac701e9c2e1ae1f92908c50afd11f.zip gcc-24fcf4bc0c6ac701e9c2e1ae1f92908c50afd11f.tar.gz gcc-24fcf4bc0c6ac701e9c2e1ae1f92908c50afd11f.tar.bz2 |
re PR c++/57945 (ICE: in varpool_get_node, at cgraph.h:840)
PR c++/57945
* passes.c (rest_of_decl_compilation): Don't call varpool_finalize_decl
on decls for which assemble_alias has been called.
* c-c++-common/torture/pr57945.c: New test.
From-SVN: r206708
Diffstat (limited to 'gcc/passes.c')
-rw-r--r-- | gcc/passes.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/passes.c b/gcc/passes.c index 3b340d3..60fb135 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -187,6 +187,8 @@ rest_of_decl_compilation (tree decl, int top_level, int at_end) { + bool finalize = true; + /* We deferred calling assemble_alias so that we could collect other attributes such as visibility. Emit the alias now. */ if (!in_lto_p) @@ -203,6 +205,7 @@ rest_of_decl_compilation (tree decl, DECL_EXTERNAL (decl) = 0; TREE_STATIC (decl) = 1; assemble_alias (decl, alias); + finalize = false; } } @@ -234,7 +237,7 @@ rest_of_decl_compilation (tree decl, rebuild it. */ if (in_lto_p && !at_end) ; - else if (TREE_CODE (decl) != FUNCTION_DECL) + else if (finalize && TREE_CODE (decl) != FUNCTION_DECL) varpool_finalize_decl (decl); } |