[clang] [Clang] Avoid a crash when parsing an invalid pseudo-destructor (PR #111666)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 9 05:12:13 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: cor3ntin (cor3ntin)
<details>
<summary>Changes</summary>
Fixes #<!-- -->11460.
---
Full diff: https://github.com/llvm/llvm-project/pull/111666.diff
3 Files Affected:
- (modified) clang/docs/ReleaseNotes.rst (+1)
- (modified) clang/lib/Sema/SemaExprCXX.cpp (+2-1)
- (modified) clang/test/Parser/cxx2c-pack-indexing.cpp (+11)
``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 583c1e6b4215c5..fdf197f802ed33 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -481,6 +481,7 @@ Bug Fixes to C++ Support
- Clang now uses the correct set of template argument lists when comparing the constraints of
out-of-line definitions and member templates explicitly specialized for a given implicit instantiation of
a class template. (#GH102320)
+- Fix a crash when parsing a pseudo destructor involving an invalid type. (#GH11460)
Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index d490452e91c3bb..8e9bcb10a80b46 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -8429,7 +8429,8 @@ ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base,
QualType ObjectType;
QualType T;
TypeLocBuilder TLB;
- if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc))
+ if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc) ||
+ DS.getTypeSpecType() == DeclSpec::TST_error)
return ExprError();
switch (DS.getTypeSpecType()) {
diff --git a/clang/test/Parser/cxx2c-pack-indexing.cpp b/clang/test/Parser/cxx2c-pack-indexing.cpp
index 1b84ddfc6c20a5..c279bdd7af8c44 100644
--- a/clang/test/Parser/cxx2c-pack-indexing.cpp
+++ b/clang/test/Parser/cxx2c-pack-indexing.cpp
@@ -63,3 +63,14 @@ struct base {
int main() {
SS<int, base>().f(0);
}
+
+
+namespace GH11460 {
+template <typename... T>
+requires( ); // expected-error {{expected expression}}
+struct SS {
+ void f( ) {
+ (*p).~T...[](); // expected-error {{use of undeclared identifier 'p'}}
+ }
+};
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/111666
More information about the cfe-commits
mailing list