From 014dd4c2f2cb1d719be7e5db876d0056c21db0c0 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 3 Dec 2010 13:44:04 -0500 Subject: [PATCH] re PR c++/46058 (gcc crashes with lvalue error on the following Code) PR c++/46058 * tree.c (lvalue_kind) [SCOPE_REF]: Handle non-dependent case. From-SVN: r167438 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/tree.c | 7 +++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/scope4.C | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/scope4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 36e7a1366d6e..a58e8cb34345 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-12-03 Jason Merrill + + PR c++/46058 + * tree.c (lvalue_kind) [SCOPE_REF]: Handle non-dependent case. + 2010-11-11 Jakub Jelinek Backport from mainline diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index ab0e95336ba3..54b76a850307 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -152,9 +152,12 @@ lvalue_p_1 (const_tree ref) return clk_ordinary; break; - /* A currently unresolved scope ref. */ + /* A scope ref in a template, left as SCOPE_REF to support later + access checking. */ case SCOPE_REF: - gcc_unreachable (); + gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE(ref))); + return lvalue_p_1 (TREE_OPERAND (ref, 1)); + case MAX_EXPR: case MIN_EXPR: /* Disallow ? as lvalues if either argument side-effects. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3e6a47e60cce..72416028397d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-03 Jason Merrill + + PR c++/46058 + * g++.dg/template/scope4.C: New. + 2010-12-03 Rainer Orth Backport from mainline: diff --git a/gcc/testsuite/g++.dg/template/scope4.C b/gcc/testsuite/g++.dg/template/scope4.C new file mode 100644 index 000000000000..a4ae074c0df0 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/scope4.C @@ -0,0 +1,15 @@ +// PR c++/46058 + +class StringLiterals { +public: + static const char dec[]; +}; + +template +class NoValueCommand : public Base { +public: +}; + +template +class DecBasic : public NoValueCommand { +}; -- 2.47.2