summaryrefslogtreecommitdiff
path: root/test/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'test/Parser')
-rw-r--r--test/Parser/cxx-default-args.cpp9
-rw-r--r--test/Parser/objc-messaging-neg-1.m6
-rw-r--r--test/Parser/statements.c5
3 files changed, 20 insertions, 0 deletions
diff --git a/test/Parser/cxx-default-args.cpp b/test/Parser/cxx-default-args.cpp
new file mode 100644
index 0000000000000..a084fb0812bac
--- /dev/null
+++ b/test/Parser/cxx-default-args.cpp
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// PR6647
+class C {
+ // After the error, the rest of the tokens inside the default arg should be
+ // skipped, avoiding a "expected ';' after class" after 'undecl'.
+ void m(int x = undecl + 0); // expected-error {{use of undeclared identifier 'undecl'}}
+};
+
diff --git a/test/Parser/objc-messaging-neg-1.m b/test/Parser/objc-messaging-neg-1.m
index 0d0cb9d8d6fea..4ddadb816f0df 100644
--- a/test/Parser/objc-messaging-neg-1.m
+++ b/test/Parser/objc-messaging-neg-1.m
@@ -1,6 +1,12 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
+@interface A
++(void) foo:(int) a;
+@end
+
int main() {
id a;
[a bla:0 6:7]; // expected-error {{expected ']'}}
+ [A foo bar]; // expected-error {{expected ':'}}
+ [A foo bar bar1]; // expected-error {{expected ':'}}
}
diff --git a/test/Parser/statements.c b/test/Parser/statements.c
index a662c9b821185..bc7192a7b2b32 100644
--- a/test/Parser/statements.c
+++ b/test/Parser/statements.c
@@ -57,3 +57,8 @@ void test6(void) {
int test7() {
return 4 // expected-error {{expected ';' after return statement}}
}
+
+void test8() {
+ // Should not skip '}' and produce a "expected '}'" error.
+ undecl // expected-error {{use of undeclared identifier 'undecl'}}
+}