re PR c++/27821 (ICE with invalid ptr-to-member)
authorLee Millward <lee.millward@gmail.com>
Thu, 22 Jun 2006 18:05:17 +0000 (18:05 +0000)
committerLee Millward <lmillward@gcc.gnu.org>
Thu, 22 Jun 2006 18:05:17 +0000 (18:05 +0000)
PR c++/27821
* decl.c (grokdeclarator): Return error_mark_node on
invalid uses of the scope resolution operator.

From-SVN: r114899

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

index 96d71238bf5c75757ae98d3a8e689f3924af780c..fcea3681422213b09dc5dfa9a966bb91ac8b6634 100644 (file)
@@ -2,6 +2,10 @@
 
        PR c++/27805
        * typeck2.c (build_m_component_ref): Use error_operand_p.
+
+       PR c++/27821
+       * decl.c (grokdeclarator): Return error_mark_node on
+       invalid uses of the scope resolution operator.
        
 2006-06-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
index c80111145bd8dbdb7e5c647fe37ca60aac3adf62..5bb61cb74fdc50abdae34874753c1feeda68da3b 100644 (file)
@@ -8151,7 +8151,7 @@ grokdeclarator (const cp_declarator *declarator,
          {
            /* Something like struct S { int N::j; };  */
            error ("invalid use of %<::%>");
-           decl = NULL_TREE;
+           return error_mark_node;
          }
        else if (TREE_CODE (type) == FUNCTION_TYPE)
          {
index 9fd22ded9224e6feb9a499a0785eb4483ed4f57e..e7d6f9d942a10aebe4bde7951f9786cd3b75eb4d 100644 (file)
@@ -7,6 +7,9 @@
 
        PR c++/27805
        * g++.dg/parse/ptrmem6.C: New test.
+
+       PR c++/27821
+       * g++.dg/template/error22.C: New test.
        
 2006-06-22  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
diff --git a/gcc/testsuite/g++.dg/template/error22.C b/gcc/testsuite/g++.dg/template/error22.C
new file mode 100644 (file)
index 0000000..0593091
--- /dev/null
@@ -0,0 +1,9 @@
+//PR c++/27821
+
+struct A
+{
+    template<void (A::*)()> struct B {};
+    void ::foo(); // { dg-error "invalid use" }
+    B<&A::foo> b; // { dg-errror "incomplete type|template argument" }
+};