llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: AZero13 (AZero13)

<details>
<summary>Changes</summary>

The `__super` keyword is an MSVC extension that refers to the base class of the 
current class context. It is fundamentally invalid for `__super` to be 
qualified by another scope specifier (e.g. `::__super` or `N::__super`).

Fixes #<!-- -->212988

---
Full diff: https://github.com/llvm/llvm-project/pull/221492.diff


2 Files Affected:

- (modified) clang/lib/Parse/ParseExprCXX.cpp (+1-1) 
- (modified) clang/test/SemaCXX/MicrosoftSuper.cpp (+7) 


``````````diff
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index ae741af7249cf..63f7938c6fc64 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -153,7 +153,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(
     }
   }
 
-  if (Tok.is(tok::kw___super)) {
+  if (!HasScopeSpecifier && Tok.is(tok::kw___super)) {
     SourceLocation SuperLoc = ConsumeToken();
     if (!Tok.is(tok::coloncolon)) {
       Diag(Tok.getLocation(), diag::err_expected_coloncolon_after_super);
diff --git a/clang/test/SemaCXX/MicrosoftSuper.cpp 
b/clang/test/SemaCXX/MicrosoftSuper.cpp
index d117b93523363..98f087708d72d 100644
--- a/clang/test/SemaCXX/MicrosoftSuper.cpp
+++ b/clang/test/SemaCXX/MicrosoftSuper.cpp
@@ -21,6 +21,13 @@ struct Base1 {
   typedef int XXX;
 };
 
+struct InvalidGlobalQualifier : Base1 {
+  // A parser that drops the global qualifier is left with the valid
+  // declaration `__super::XXX x;` and accepts this line silently; expecting
+  // a diagnostic here catches that even in builds without assertions.
+  ::__super::XXX x; // expected-error {{expected unqualified-id}}
+};
+
 struct Derived : Base1 {
   __super::XXX x;
   typedef __super::XXX Type;

``````````

</details>


https://github.com/llvm/llvm-project/pull/221492
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to