https://github.com/cor3ntin created 
https://github.com/llvm/llvm-project/pull/111666

Fixes #11460.

>From 769db7b7a40060fac77ff07e61f161eeedd2ec02 Mon Sep 17 00:00:00 2001
From: Corentin Jabot <corentinja...@gmail.com>
Date: Wed, 9 Oct 2024 14:10:12 +0200
Subject: [PATCH] [Clang] Avoid a crash when parsing an invalid
 pseudo-destructor

Fixes #11460.
---
 clang/docs/ReleaseNotes.rst               |  1 +
 clang/lib/Sema/SemaExprCXX.cpp            |  3 ++-
 clang/test/Parser/cxx2c-pack-indexing.cpp | 11 +++++++++++
 3 files changed, 14 insertions(+), 1 deletion(-)

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'}}
+    }
+};
+}

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to