[clang] [clang][ObjectiveC] Fix Parsing Method Parameter Types with the `::` Prefix (PR #119908)
Qiongsi Wu via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 16 09:35:06 PST 2024
https://github.com/qiongsiwu updated https://github.com/llvm/llvm-project/pull/119908
>From 63c424414c1814ec9b4c3c5a459bfe1be684586d Mon Sep 17 00:00:00 2001
From: Qiongsi Wu <qiongsi_wu at apple.com>
Date: Fri, 13 Dec 2024 09:41:41 -0800
Subject: [PATCH 1/2] Fix parsing :: in method parameter type.
---
clang/lib/Parse/Parser.cpp | 8 +++++++-
clang/test/Parser/objc-coloncolon.m | 5 +++++
2 files changed, 12 insertions(+), 1 deletion(-)
create mode 100644 clang/test/Parser/objc-coloncolon.m
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index 36e56a92c3092e..aa78d702553172 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -2222,8 +2222,14 @@ bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(
}
}
- if (SS.isEmpty())
+ if (SS.isEmpty()) {
+ if (getLangOpts().ObjC && Tok.is(tok::coloncolon)) {
+ // ObjectiveC does not allow :: as as a scope token.
+ Diag(ConsumeToken(), diag::err_expected_type);
+ return true;
+ }
return false;
+ }
// A C++ scope specifier that isn't followed by a typename.
AnnotateScopeToken(SS, IsNewScope);
diff --git a/clang/test/Parser/objc-coloncolon.m b/clang/test/Parser/objc-coloncolon.m
new file mode 100644
index 00000000000000..e8a09898263bb3
--- /dev/null
+++ b/clang/test/Parser/objc-coloncolon.m
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 -x objective-c -fsyntax-only -verify %s
+
+ at interface A
+- (instancetype)init:(::A *) foo; // expected-error {{expected a type}}
+ at end
>From ec903eb3fcd18ba53af901582060bd61b13cf324 Mon Sep 17 00:00:00 2001
From: Qiongsi Wu <qiongsi_wu at apple.com>
Date: Mon, 16 Dec 2024 09:34:52 -0800
Subject: [PATCH 2/2] Fix ObjectiveC++
---
clang/lib/Parse/Parser.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index aa78d702553172..8ba6a5dce8a994 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -2223,7 +2223,8 @@ bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(
}
if (SS.isEmpty()) {
- if (getLangOpts().ObjC && Tok.is(tok::coloncolon)) {
+ if (getLangOpts().ObjC && !getLangOpts().CPlusPlus &&
+ Tok.is(tok::coloncolon)) {
// ObjectiveC does not allow :: as as a scope token.
Diag(ConsumeToken(), diag::err_expected_type);
return true;
More information about the cfe-commits
mailing list