From 3e03c9591c711e01ddcc3bfc01d18ac3a85eb852 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 3 Sep 2008 22:34:35 +0200 Subject: [PATCH] re PR c++/37348 (internal compiler error: tree check: expected var_decl, have field_decl in cp_finish_decl, at cp/decl.c:5461) PR c++/37348 * 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. From-SVN: r139956 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 2 +- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/parse/crash45.C | 7 +++++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/parse/crash45.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 442dd8e60e97..4166bd148dac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2008-09-03 Jakub Jelinek + 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. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index fbd16e5b19c5..c045353fe7f5 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bfadce1f807d..b1d932467680 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-09-03 Jakub Jelinek + 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 index 000000000000..8696ab4bb3c7 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash45.C @@ -0,0 +1,7 @@ +// PR c++/37348 +// { dg-do compile } + +struct A +{ + template int f (B); // { dg-error "was not declared in this scope|cannot be a member template" } +}; -- 2.47.3