https://github.com/Berazold updated 
https://github.com/llvm/llvm-project/pull/215694

>From 56d71afcb6e502fa7d6edd0f6b82c0e6f0983f61 Mon Sep 17 00:00:00 2001
From: iaroslav <[email protected]>
Date: Tue, 11 Aug 2026 23:25:19 +0100
Subject: [PATCH 1/4] Fix null pointer dereference in C mode

---
 clang/lib/AST/ASTContext.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 47028c616e45c..0301cd87ff8e3 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -13848,21 +13848,23 @@ void 
ASTContext::addCopyConstructorForExceptionObject(CXXRecordDecl *RD,
 
 void ASTContext::addTypedefNameForUnnamedTagDecl(TagDecl *TD,
                                                  TypedefNameDecl *DD) {
-  return ABI->addTypedefNameForUnnamedTagDecl(TD, DD);
+  if (ABI)
+    ABI->addTypedefNameForUnnamedTagDecl(TD, DD);
 }
 
 TypedefNameDecl *
 ASTContext::getTypedefNameForUnnamedTagDecl(const TagDecl *TD) {
-  return ABI->getTypedefNameForUnnamedTagDecl(TD);
+  return ABI ? ABI->getTypedefNameForUnnamedTagDecl(TD) : nullptr;
 }
 
 void ASTContext::addDeclaratorForUnnamedTagDecl(TagDecl *TD,
                                                 DeclaratorDecl *DD) {
-  return ABI->addDeclaratorForUnnamedTagDecl(TD, DD);
+  if (ABI)
+    ABI->addDeclaratorForUnnamedTagDecl(TD, DD);
 }
 
 DeclaratorDecl *ASTContext::getDeclaratorForUnnamedTagDecl(const TagDecl *TD) {
-  return ABI->getDeclaratorForUnnamedTagDecl(TD);
+  return ABI ? ABI->getDeclaratorForUnnamedTagDecl(TD) : nullptr;
 }
 
 void ASTContext::setParameterIndex(const ParmVarDecl *D, unsigned int index) {

>From fb0d6c85bdfed424709999149d0b848b3aaf00cd Mon Sep 17 00:00:00 2001
From: iaroslav <[email protected]>
Date: Tue, 11 Aug 2026 23:33:33 +0100
Subject: [PATCH 2/4] Add test for anonymous struct function type hashing on
 Windows

---
 .../ubsan-function-anonymous-struct-windows.c        | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c

diff --git a/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c 
b/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c
new file mode 100644
index 0000000000000..d4a4fad2959d6
--- /dev/null
+++ b/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fsanitize=function 
-emit-llvm -o - %s | FileCheck %s
+
+// CHECK: define internal void @sample_tuple()
+// CHECK: !{{[0-9]+}} = !{i32 {{[0-9]+}}, !"typeid"}
+
+static struct { int first; float second; } sample_tuple(void) {
+    return (typeof(sample_tuple())){ .first = 10, .second = 0.1f };
+}
+
+void call_sample(void) {
+    sample_tuple();
+}

>From cbcbbe5a70f4470854a1941a24fd750af9575451 Mon Sep 17 00:00:00 2001
From: iaroslav <[email protected]>
Date: Wed, 19 Aug 2026 21:13:26 +0100
Subject: [PATCH 3/4] [Docs] Add release note for ASTContext unnamed tag crash
 fix

---
 clang/docs/ReleaseNotes.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md
index f719672e8a4e5..27ba4e3a656ae 100644
--- a/clang/docs/ReleaseNotes.md
+++ b/clang/docs/ReleaseNotes.md
@@ -388,6 +388,7 @@ features cannot lower the translation-unit ABI level;
 - Fixed an assertion crash when instantiating a nested requirement with an 
invalid constraint. (#GH213575)
 - Clang now defines the GCC-compatible predefined macro `__SIG_ATOMIC_TYPE__`. 
(#GH213895)
 - Fixed a bug where a stray closing curley brace in an OpenMP/OpenACC pragma 
could cause pragma parsing issues when inside of a member function. (#GH214195)
+- Fixed a crash when compiling C code with `-fsanitize=function` targeting the 
MSVC ABI, where a function returns an anonymous struct. (#GH215689)
 
 #### Bug Fixes to Compiler Builtins
 

>From 616b908c1244fcfa5922c2d5f38fc53be49286f0 Mon Sep 17 00:00:00 2001
From: iaroslav <[email protected]>
Date: Wed, 19 Aug 2026 21:48:34 +0100
Subject: [PATCH 4/4] [UBSan][Test] Fix anonymous struct function hashing test

---
 clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c 
b/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c
index d4a4fad2959d6..7ee3a680f3e0d 100644
--- a/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c
+++ b/clang/test/CodeGen/ubsan-function-anonymous-struct-windows.c
@@ -1,7 +1,6 @@
 // RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fsanitize=function 
-emit-llvm -o - %s | FileCheck %s
 
-// CHECK: define internal void @sample_tuple()
-// CHECK: !{{[0-9]+}} = !{i32 {{[0-9]+}}, !"typeid"}
+// CHECK: define internal {{.*}} @sample_tuple(){{.*}} !func_sanitize 
!{{[0-9]+}}
 
 static struct { int first; float second; } sample_tuple(void) {
     return (typeof(sample_tuple())){ .first = 10, .second = 0.1f };

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

Reply via email to