PR c++/37348
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Sep 2008 20:34:35 +0000 (20:34 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Sep 2008 20:34:35 +0000 (20:34 +0000)
* decl.c (cp_finish_decl): Only set
DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P if decl is VAR_DECL.

* g++.dg/parse/crash45.C: New test.

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

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

index 442dd8e..4166bd1 100644 (file)
@@ -1,5 +1,9 @@
 2008-09-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/37348
+       * decl.c (cp_finish_decl): Only set
+       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P if decl is VAR_DECL.
+
        PR c++/37189
        * cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): New
        extern decls.
index fbd16e5..c045353 100644 (file)
@@ -5517,7 +5517,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
          DECL_INITIAL (decl) = NULL_TREE;
        }
 
-      if (init && init_const_expr_p)
+      if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
        {
          DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
          if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
index bfadce1..b1d9324 100644 (file)
@@ -1,5 +1,8 @@
 2008-09-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/37348
+       * g++.dg/parse/crash45.C: New test.
+
        PR c++/37189
        * g++.dg/gomp/pr37189.C: New test.
 
diff --git a/gcc/testsuite/g++.dg/parse/crash45.C b/gcc/testsuite/g++.dg/parse/crash45.C
new file mode 100644 (file)
index 0000000..8696ab4
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/37348
+// { dg-do compile }
+
+struct A
+{
+  template <class> int f (B);  // { dg-error "was not declared in this scope|cannot be a member template" }
+};