aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c2
-rw-r--r--gcc/testsuite/g++.dg/parse/error21.C1
-rw-r--r--gcc/testsuite/g++.dg/parse/qualified5.C13
4 files changed, 18 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4a526b9..dc7708b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2018-03-14 Jason Merrill <jason@redhat.com>
+ PR c++/84820 - no error for invalid qualified-id.
+ * parser.c (cp_parser_make_indirect_declarator): Don't wrap
+ cp_error_declarator.
+
PR c++/84801 - ICE with unexpanded pack in lambda.
* pt.c (check_for_bare_parameter_packs): Don't return early for a
lambda in non-template context.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 0a82f41..119f6c0 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -3823,7 +3823,7 @@ cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
cp_declarator *target,
tree attributes)
{
- if (code == ERROR_MARK)
+ if (code == ERROR_MARK || target == cp_error_declarator)
return cp_error_declarator;
if (code == INDIRECT_REF)
diff --git a/gcc/testsuite/g++.dg/parse/error21.C b/gcc/testsuite/g++.dg/parse/error21.C
index 8c717d7..920a490 100644
--- a/gcc/testsuite/g++.dg/parse/error21.C
+++ b/gcc/testsuite/g++.dg/parse/error21.C
@@ -8,6 +8,5 @@ void foo()
// Check that we do not complain about an unused
// compiler-generated variable.
A& = a; // { dg-error "6:expected unqualified-id before '=' token" "6" }
- // { dg-error "8:'a' was not declared in this scope" "8" { target *-*-* } .-1 }
}
diff --git a/gcc/testsuite/g++.dg/parse/qualified5.C b/gcc/testsuite/g++.dg/parse/qualified5.C
new file mode 100644
index 0000000..dff934e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/qualified5.C
@@ -0,0 +1,13 @@
+// PR c++/84820
+
+struct A {};
+
+template<int> struct B : A
+{
+ B()
+ {
+ A(&A::foo); // { dg-error "foo" }
+ }
+};
+
+B<0> b;