https://github.com/AditiRM updated 
https://github.com/llvm/llvm-project/pull/208151

>From 9e282976c175ae845a720bca64ef270f5ff0df88 Mon Sep 17 00:00:00 2001
From: AditiRM <[email protected]>
Date: Wed, 8 Jul 2026 06:48:50 +0000
Subject: [PATCH 1/3] [NFC][Clang] Pre-commit test for assertion failure in
 template specialization error recovery

---
 ...ecialization-after-instantiation-crash.cpp | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 
clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp

diff --git 
a/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp 
b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
new file mode 100644
index 0000000000000..21a657b19822d
--- /dev/null
+++ b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
@@ -0,0 +1,40 @@
+// Test for assertion failure when handling explicit template specialization 
after instantiation
+// This test documents the current crash behavior (will be fixed in subsequent 
patch)
+//
+// RUN: not --crash %clang_cc1 -fsyntax-only -verify %s 2>&1 | FileCheck %s
+//
+// REQUIRES: asserts
+
+// This test case triggers an assertion failure in getASTRecordLayout()
+// when the compiler encounters explicit specialization after instantiation
+// and attempts to get layout information during error recovery.
+
+template <typename T>
+struct X {
+    struct Y {
+        Y() : v(0) {}
+        int v;
+        int getValue();
+    } y;
+};
+
+template <typename T>
+int X<T>::Y::getValue() {
+    return ++v;
+}
+
+// expected-error@+1 {{explicit specialization of 'Y' after instantiation}}
+template <> struct X<int>::Y { int getValue() { return 55; } };
+// expected-note@-11 {{implicit instantiation first required here}}
+
+extern template class X<int>::Y;
+
+int main() {
+    X<int> x;
+    return x.y.getValue(); // expected-error {{no member named 'getValue'}}
+}
+
+// Verify the assertion failure occurs
+// CHECK: RecordLayoutBuilder.cpp
+// CHECK: Assertion{{.*}}!D->isInvalidDecl()
+// CHECK: Cannot get layout of invalid decl

>From bf48aaa1d6af87e67099cca3730fa1b85bc07e8b Mon Sep 17 00:00:00 2001
From: AditiRM <[email protected]>
Date: Wed, 8 Jul 2026 08:30:44 +0000
Subject: [PATCH 2/3] [neat] fix error checks a/c to windows error format

---
 .../explicit-specialization-after-instantiation-crash.cpp   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp 
b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
index 21a657b19822d..4ee2bfa61da45 100644
--- a/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
+++ b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
@@ -35,6 +35,6 @@ int main() {
 }
 
 // Verify the assertion failure occurs
-// CHECK: RecordLayoutBuilder.cpp
-// CHECK: Assertion{{.*}}!D->isInvalidDecl()
-// CHECK: Cannot get layout of invalid decl
+// CHECK: Assertion
+// CHECK: isInvalidDecl
+// CHECK: Cannot get layout of invalid decl
\ No newline at end of file

>From 0b787ac5e8fd7e9e19ebc7d9f511a94b4b1e5862 Mon Sep 17 00:00:00 2001
From: AditiRM <[email protected]>
Date: Thu, 9 Jul 2026 07:21:47 +0000
Subject: [PATCH 3/3] [neat] minor changes

---
 .../explicit-specialization-after-instantiation-crash.cpp     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git 
a/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp 
b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
index 4ee2bfa61da45..9120fa45330b8 100644
--- a/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
+++ b/clang/test/SemaCXX/explicit-specialization-after-instantiation-crash.cpp
@@ -1,5 +1,5 @@
-// Test for assertion failure when handling explicit template specialization 
after instantiation
-// This test documents the current crash behavior (will be fixed in subsequent 
patch)
+// Test that explicit template specialization after instantiation
+// is handled gracefully without assertion failure.
 //
 // RUN: not --crash %clang_cc1 -fsyntax-only -verify %s 2>&1 | FileCheck %s
 //

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

Reply via email to