OSDN Git Service

* varasm.c (assemble_external): Assert this function is only called
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Mar 2012 16:35:59 +0000 (16:35 +0000)
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 26 Mar 2012 16:35:59 +0000 (16:35 +0000)
during or after expanding to RTL.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185812 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/varasm.c

index 697b5b1..c1628b7 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-26  Steven Bosscher  <steven@gcc.gnu.org>
+
+       * varasm.c (assemble_external): Assert this function is only called
+       during or after expanding to RTL.
+
 2012-03-26  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/50052
index 9bead9b..26f22dd 100644 (file)
@@ -2166,12 +2166,18 @@ static GTY(()) tree weak_decls;
 void
 assemble_external (tree decl ATTRIBUTE_UNUSED)
 {
-  /* Because most platforms do not define ASM_OUTPUT_EXTERNAL, the
-     main body of this code is only rarely exercised.  To provide some
-     testing, on all platforms, we make sure that the ASM_OUT_FILE is
-     open.  If it's not, we should not be calling this function.  */
+  /*  Make sure that the ASM_OUT_FILE is open.
+      If it's not, we should not be calling this function.  */
   gcc_assert (asm_out_file);
 
+  /* This function should only be called if we are expanding, or have
+     expanded, to RTL.
+     Ideally, only final.c would be calling this function, but it is
+     not clear whether that would break things somehow.  See PR 17982
+     for further discussion.  */
+  gcc_assert (cgraph_state == CGRAPH_STATE_EXPANSION
+             || cgraph_state == CGRAPH_STATE_FINISHED);
+
   if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
     return;