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/2] [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/2] [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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
