PR c++/28016
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Jun 2006 01:11:34 +0000 (01:11 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Jun 2006 01:11:34 +0000 (01:11 +0000)
* decl.c (cp_finsh_decl): Do not emit uninstantiated static data
members.
PR c++/28016
* g++.dg/template/static26.C: New test.

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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/static26.C [new file with mode: 0644]

index 35001a0..2cbadcf 100644 (file)
@@ -1,5 +1,9 @@
 2006-06-16  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/28016
+       * decl.c (cp_finsh_decl): Do not emit uninstantiated static data
+       members.
+
        PR c++/27979
        * call.c (standard_conversion): Strip cv-qualifiers from bitfield
        types.
index 7db989d..c801111 100644 (file)
@@ -5207,16 +5207,17 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
   if (at_function_scope_p ())
     add_decl_expr (decl);
 
-  if (TREE_CODE (decl) == VAR_DECL)
-    layout_var_decl (decl);
-
-  /* Output the assembler code and/or RTL code for variables and functions,
-     unless the type is an undefined structure or union.
-     If not, it will get done when the type is completed.  */
-  if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
+  /* Let the middle end know about variables and functions -- but not
+     static data members in uninstantiated class templates.  */
+  if (!saved_processing_template_decl
+      && (TREE_CODE (decl) == VAR_DECL 
+         || TREE_CODE (decl) == FUNCTION_DECL))
     {
       if (TREE_CODE (decl) == VAR_DECL)
-       maybe_commonize_var (decl);
+       {
+         layout_var_decl (decl);
+         maybe_commonize_var (decl);
+       }
 
       make_rtl_for_nonlocal_decl (decl, init, asmspec);
 
index b4cc183..fe2b7e8 100644 (file)
@@ -1,5 +1,8 @@
 2006-06-16  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/28016
+       * g++.dg/template/static26.C: New test.
+
        PR c++/27979
        * g++.dg/expr/bitfield2.C: New test. 
 
diff --git a/gcc/testsuite/g++.dg/template/static26.C b/gcc/testsuite/g++.dg/template/static26.C
new file mode 100644 (file)
index 0000000..095248b
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/28016
+// { dg-final { scan-assembler-not "computed" } }
+
+template<class T1, class T2>
+struct scalar_divides_assign {
+  static const bool computed ;
+};
+
+template<class T1, class T2>
+const bool scalar_divides_assign<T1,T2>::computed = true;