re PR c++/18416 (ICE in import_export_decl)
authorMark Mitchell <mark@codesourcery.com>
Fri, 12 Nov 2004 16:37:52 +0000 (16:37 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 12 Nov 2004 16:37:52 +0000 (16:37 +0000)
PR c++/18416
* passes.c (rest_of_decl_compilation): Do not look at DECL_RTL
when deciding whether to pass a variable to
cgraph_varpool_finalize_decl or assemble_variable.
* toplev.c (check_global_declarations): Do not clear DECL_RTL.

PR c++/18416
* g++.dg/init/global1.C: New test.

From-SVN: r90532

gcc/ChangeLog
gcc/passes.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/global1.C [new file with mode: 0644]
gcc/toplev.c

index 9994394..3710463 100644 (file)
@@ -1,3 +1,11 @@
+2004-11-12  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/18416
+       * passes.c (rest_of_decl_compilation): Do not look at DECL_RTL
+       when deciding whether to pass a variable to
+       cgraph_varpool_finalize_decl or assemble_variable.
+       * toplev.c (check_global_declarations): Do not clear DECL_RTL. 
+
 2004-11-12  Kazu Hirata  <kazu@cs.umass.edu>
 
        * tree-vectorizer.c: Fix a comment typo.
index 9a486b7..e634372 100644 (file)
@@ -229,14 +229,7 @@ rest_of_decl_compilation (tree decl,
          && !DECL_EXTERNAL (decl))
        {
          if (flag_unit_at_a_time && !cgraph_global_info_ready
-             && TREE_CODE (decl) != FUNCTION_DECL && top_level
-             /* If we defer processing of decls that have had their
-                DECL_RTL set above (say, in make_decl_rtl),
-                check_global_declarations() will clear it before
-                assemble_variable has a chance to act on it.  This
-                would remove all traces of the register name in a
-                global register variable, for example.  */
-             && !DECL_RTL_SET_P (decl))
+             && TREE_CODE (decl) != FUNCTION_DECL && top_level)
            cgraph_varpool_finalize_decl (decl);
          else
            assemble_variable (decl, top_level, at_end, 0);
index f04c8ab..d24479b 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-12  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/18416
+       * g++.dg/init/global1.C: New test.
+
 2004-11-12  Eric Botcazou  <ebotcazou@act-europe.fr>
 
        * gcc.c-torture/execute/20041112-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/init/global1.C b/gcc/testsuite/g++.dg/init/global1.C
new file mode 100644 (file)
index 0000000..21f1cac
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/18416
+
+class errarg { 
+  enum { EMPTY } type; 
+public: 
+  errarg(); 
+}; 
+extern errarg empty_errarg; 
+extern void errprint(const char *, 
+                    const errarg &arg1 = empty_errarg, 
+                    const errarg &arg2 = empty_errarg, 
+                    const errarg &arg3 = empty_errarg); 
+errarg::errarg() : type(EMPTY) 
+{ 
+} 
+errarg empty_errarg; 
index 4ce593a..29ae065 100644 (file)
@@ -819,13 +819,6 @@ check_global_declarations (tree *vec, int len)
     {
       decl = vec[i];
 
-      if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
-         && ! TREE_ASM_WRITTEN (decl))
-       /* Cancel the RTL for this decl so that, if debugging info
-          output for global variables is still to come,
-          this one will be omitted.  */
-       SET_DECL_RTL (decl, NULL_RTX);
-
       /* Warn about any function
         declared static but not defined.
         We don't warn about variables,