PR c++/46058
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Dec 2010 16:56:37 +0000 (16:56 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Dec 2010 16:56:37 +0000 (16:56 +0000)
* tree.c (lvalue_kind) [SCOPE_REF]: Handle non-dependent case.

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

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

index c24204e..edb50b5 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/46058
+       * tree.c (lvalue_kind) [SCOPE_REF]: Handle non-dependent case.
+
 2010-12-03  Richard Guenther  <rguenther@suse.de>
 
        PR c/46745
index 5538eea..1a77dc1 100644 (file)
@@ -146,9 +146,12 @@ lvalue_kind (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_kind (TREE_OPERAND (ref, 1));
+
     case MAX_EXPR:
     case MIN_EXPR:
       /* Disallow <? and >? as lvalues if either argument side-effects.  */
index c75ed75..e70cf6a 100644 (file)
@@ -1,3 +1,8 @@
+2010-12-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/46058
+       * g++.dg/template/scope4.C: New.
+
 2010-12-03  Nathan Froyd  <froydnj@codesourcery.com>
 
        * gcc.target/arm/neon-offset-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/template/scope4.C b/gcc/testsuite/g++.dg/template/scope4.C
new file mode 100644 (file)
index 0000000..a4ae074
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/46058
+
+class StringLiterals {
+public:
+   static const char dec[];
+};
+
+template<class St, class Base, const char* name>
+class NoValueCommand : public Base {
+public:
+};
+
+template<class St, class Base>
+class DecBasic : public NoValueCommand<St,Base,StringLiterals::dec> {
+};