[compiler-rt] [ubsan] Test CFI summaries globally (PR #206434)

Jakob Koschel via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 29 07:48:41 PDT 2026


https://github.com/jakos-sec updated https://github.com/llvm/llvm-project/pull/206434

>From 6cdd03aa3c9db084476fbaee92c97cc6f6b9ad51 Mon Sep 17 00:00:00 2001
From: Jakob Koschel <jakobkoschel at google.com>
Date: Mon, 29 Jun 2026 09:10:59 +0000
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 compiler-rt/test/cfi/anon-namespace.cpp                 | 2 ++
 compiler-rt/test/cfi/bad-cast.cpp                       | 2 ++
 compiler-rt/test/cfi/base-derived-destructor.cpp        | 1 +
 compiler-rt/test/cfi/cross-dso-diagnostic.cpp           | 2 ++
 compiler-rt/test/cfi/cross-dso/icall/diag.cpp           | 3 +++
 compiler-rt/test/cfi/cross-dso/icall/icall-from-dso.cpp | 1 +
 compiler-rt/test/cfi/cross-dso/icall/icall.cpp          | 1 +
 compiler-rt/test/cfi/cross-dso/simple-fail.cpp          | 2 ++
 compiler-rt/test/cfi/cross-dso/target_out_of_bounds.cpp | 6 ++++++
 compiler-rt/test/cfi/icall/bad-signature.c              | 1 +
 compiler-rt/test/cfi/lit.cfg.py                         | 6 ++++--
 compiler-rt/test/cfi/mfcall.cpp                         | 5 +++++
 compiler-rt/test/cfi/multiple-inheritance.cpp           | 2 ++
 compiler-rt/test/cfi/nvcall.cpp                         | 1 +
 compiler-rt/test/cfi/overwrite.cpp                      | 1 +
 compiler-rt/test/cfi/simple-fail.cpp                    | 2 ++
 compiler-rt/test/cfi/target_uninstrumented.cpp          | 2 ++
 compiler-rt/test/cfi/vdtor.cpp                          | 1 +
 18 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/compiler-rt/test/cfi/anon-namespace.cpp b/compiler-rt/test/cfi/anon-namespace.cpp
index 2a7ed9c0ac5e7..7ef41f55d84c8 100644
--- a/compiler-rt/test/cfi/anon-namespace.cpp
+++ b/compiler-rt/test/cfi/anon-namespace.cpp
@@ -79,8 +79,10 @@ int main() {
 
   // CFI-DIAG: runtime error: control flow integrity check for type '(anonymous namespace)::B' failed during base-to-derived cast
   // CFI-DIAG-NEXT: note: vtable is of type '{{.*}}anonymous namespace{{.*}}::B'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG: runtime error: control flow integrity check for type '(anonymous namespace)::B' failed during virtual call
   // CFI-DIAG-NEXT: note: vtable is of type '{{.*}}anonymous namespace{{.*}}::B'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   ((B *)a)->f(); // UB here
 
   // CFI-NOT: {{^2$}}
diff --git a/compiler-rt/test/cfi/bad-cast.cpp b/compiler-rt/test/cfi/bad-cast.cpp
index 1c4f19e9e6420..ad3e13313235e 100644
--- a/compiler-rt/test/cfi/bad-cast.cpp
+++ b/compiler-rt/test/cfi/bad-cast.cpp
@@ -100,9 +100,11 @@ int main(int argc, char **argv) {
 
   // CFI-DIAG-D: runtime error: control flow integrity check for type 'B' failed during base-to-derived cast
   // CFI-DIAG-D-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG-D: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
 
   // CFI-DIAG-U: runtime error: control flow integrity check for type 'B' failed during cast to unrelated type
   // CFI-DIAG-U-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG-U: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
 
   switch (argv[1][0]) {
     case 'a':
diff --git a/compiler-rt/test/cfi/base-derived-destructor.cpp b/compiler-rt/test/cfi/base-derived-destructor.cpp
index 33c7445d55ea9..e1ece214c5011 100644
--- a/compiler-rt/test/cfi/base-derived-destructor.cpp
+++ b/compiler-rt/test/cfi/base-derived-destructor.cpp
@@ -83,6 +83,7 @@ int main() {
 
   // CFI-DIAG: runtime error: control flow integrity check for type 'B' failed during base-to-derived cast
   // CFI-DIAG-NEXT: note: vtable is of type '{{(class )?}}A<{{(class )?}}B>'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   B* b = new B;
   break_optimization(b);
   delete b; // UB here
diff --git a/compiler-rt/test/cfi/cross-dso-diagnostic.cpp b/compiler-rt/test/cfi/cross-dso-diagnostic.cpp
index 9d0e077a7eaf7..e2818d85833df 100644
--- a/compiler-rt/test/cfi/cross-dso-diagnostic.cpp
+++ b/compiler-rt/test/cfi/cross-dso-diagnostic.cpp
@@ -33,11 +33,13 @@ int main() {
   }
 
   // CHECK: runtime error: control flow integrity check for type 'void *()' failed during indirect function call
+  // CHECK: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CHECK: cross-dso-diagnostic.cpp:[[@LINE-13]]: note: dso_symbol defined here
   // CHECK: check failed in {{.*}}_exe_suffix, destination function located in {{.*}}[[DSONAME]]
   void *S = fp(); // trigger cfi-icall failure
 
   // CHECK: runtime error: control flow integrity check for type 'S1' failed during cast to unrelated type
+  // CHECK: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CHECK: invalid vtable
   // CHECK: check failed in {{.*}}_exe_suffix, vtable located in {{.*}}[[DSONAME]]
   S1 *Scast = reinterpret_cast<S1*>(S); // trigger cfi-unrelated-cast failure
diff --git a/compiler-rt/test/cfi/cross-dso/icall/diag.cpp b/compiler-rt/test/cfi/cross-dso/icall/diag.cpp
index fadbdefd066ce..d577685f44eee 100644
--- a/compiler-rt/test/cfi/cross-dso/icall/diag.cpp
+++ b/compiler-rt/test/cfi/cross-dso/icall/diag.cpp
@@ -113,6 +113,7 @@ int main(int argc, char *argv[]) {
   void *p;
   if (argv[1][0] == 'i') {
     // ICALL-DIAG: runtime error: control flow integrity check for type 'void *(int)' failed during indirect function call
+    // ICALL-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // ICALL-DIAG-NEXT: dynamic.so+0x{{[[:xdigit:]]+}}): note: create_B() {{(\(.cfi_jt\) )?}}defined here
     // ICALL-NODIAG-NOT: runtime error: control flow integrity check {{.*}} during indirect function call
     p = ((void *(*)(int))create_B)(42);
@@ -130,6 +131,7 @@ int main(int argc, char *argv[]) {
   if (argv[1][1] == 'c') {
     // CAST-DIAG: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
     // CAST-DIAG-NEXT: note: vtable is of type '{{(struct )?}}B'
+    // CAST-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CAST-NODIAG-NOT: runtime error: control flow integrity check {{.*}} during cast to unrelated type
     a = (A*)p;
   } else {
@@ -145,6 +147,7 @@ int main(int argc, char *argv[]) {
 
   // VCALL-DIAG: runtime error: control flow integrity check for type 'A' failed during virtual call
   // VCALL-DIAG-NEXT: note: vtable is of type '{{(struct )?}}B'
+  // VCALL-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // VCALL-NODIAG-NOT: runtime error: control flow integrity check {{.*}} during virtual call
   if (argv[1][2] == 'v') {
     a->f(); // UB here
diff --git a/compiler-rt/test/cfi/cross-dso/icall/icall-from-dso.cpp b/compiler-rt/test/cfi/cross-dso/icall/icall-from-dso.cpp
index 3364d54fdfadb..b168305664db6 100644
--- a/compiler-rt/test/cfi/cross-dso/icall/icall-from-dso.cpp
+++ b/compiler-rt/test/cfi/cross-dso/icall/icall-from-dso.cpp
@@ -18,6 +18,7 @@ void f() {
   // CHECK: =2=
   fprintf(stderr, "=2=\n");
   // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG-NEXT: ({{.*}}exe+0x{{[[:xdigit:]]+}}): note: g() {{(\(.cfi_jt\) )?}}defined here
   ((void (*)(int))g)(42); // UB here
   // CHECK-DIAG: =3=
diff --git a/compiler-rt/test/cfi/cross-dso/icall/icall.cpp b/compiler-rt/test/cfi/cross-dso/icall/icall.cpp
index 671d6f1d7fdb7..25866be6d6f58 100644
--- a/compiler-rt/test/cfi/cross-dso/icall/icall.cpp
+++ b/compiler-rt/test/cfi/cross-dso/icall/icall.cpp
@@ -21,6 +21,7 @@ int main() {
   // CHECK: =2=
   fprintf(stderr, "=2=\n");
   // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG-NEXT: ({{.*}}dynamic.so+0x{{[[:xdigit:]]+}}): note: f() {{(\(.cfi_jt\) )?}}defined here
   ((void (*)(int))f)(42); // UB here
   // CHECK-DIAG: =3=
diff --git a/compiler-rt/test/cfi/cross-dso/simple-fail.cpp b/compiler-rt/test/cfi/cross-dso/simple-fail.cpp
index 91ce45a6130c4..68176803b2c73 100644
--- a/compiler-rt/test/cfi/cross-dso/simple-fail.cpp
+++ b/compiler-rt/test/cfi/cross-dso/simple-fail.cpp
@@ -79,6 +79,7 @@ int main(int argc, char *argv[]) {
     // Test cast. BOOM.
     // CFI-DIAG-CAST: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
     // CFI-DIAG-CAST-NEXT: note: vtable is of type '{{(struct )?}}B'
+    // CFI-DIAG-CAST: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     a = (A*)p;
   } else {
     // Invisible to CFI. Test virtual call later.
@@ -92,6 +93,7 @@ int main(int argc, char *argv[]) {
 
   // CFI-DIAG-CALL: runtime error: control flow integrity check for type 'A' failed during virtual call
   // CFI-DIAG-CALL-NEXT: note: vtable is of type '{{(struct )?}}B'
+  // CFI-DIAG-CALL: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   a->f(); // UB here
 
   // CFI-NOT: =2=
diff --git a/compiler-rt/test/cfi/cross-dso/target_out_of_bounds.cpp b/compiler-rt/test/cfi/cross-dso/target_out_of_bounds.cpp
index 80b736e2c91cd..ebd563df80d27 100644
--- a/compiler-rt/test/cfi/cross-dso/target_out_of_bounds.cpp
+++ b/compiler-rt/test/cfi/cross-dso/target_out_of_bounds.cpp
@@ -35,9 +35,11 @@ int main(int argc, char *argv[]) {
     // Create an object with a vtable in an unaddressable memory region.
     *(uintptr_t *)p = (uintptr_t)vtable + 64;
     // CHECK-UNADDR: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-UNADDR: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-UNADDR: note: invalid vtable
     // CHECK-UNADDR: <memory cannot be printed>
     // CHECK-UNADDR: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-UNADDR: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-UNADDR: note: invalid vtable
     // CHECK-UNADDR: <memory cannot be printed>
   } else if (argc > 1 && strcmp(argv[1], "zero") == 0) {
@@ -46,9 +48,11 @@ int main(int argc, char *argv[]) {
     void *vtable = calloc(1, 128);
     *(uintptr_t *)p = (uintptr_t)vtable + 64;
     // CHECK-ZERO: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-ZERO: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-ZERO: note: invalid vtable
     // CHECK-ZERO: 00 00 00 00 00 00 00 00
     // CHECK-ZERO: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-ZERO: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-ZERO: note: invalid vtable
     // CHECK-ZERO: 00 00 00 00 00 00 00 00
   } else {
@@ -58,9 +62,11 @@ int main(int argc, char *argv[]) {
     memset(vtable, 0xFE, 128);
     *(uintptr_t *)p = (uintptr_t)vtable + 64;
     // CHECK-TYPEINFO: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-TYPEINFO: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-TYPEINFO: note: invalid vtable
     // CHECK-TYPEINFO: fe fe fe fe fe fe fe fe
     // CHECK-TYPEINFO: runtime error: control flow integrity check for type 'A' failed during cast
+    // CHECK-TYPEINFO: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     // CHECK-TYPEINFO: note: invalid vtable
     // CHECK-TYPEINFO: fe fe fe fe fe fe fe fe
   }
diff --git a/compiler-rt/test/cfi/icall/bad-signature.c b/compiler-rt/test/cfi/icall/bad-signature.c
index 93f2c5797bda6..09ef257e4fdd0 100644
--- a/compiler-rt/test/cfi/icall/bad-signature.c
+++ b/compiler-rt/test/cfi/icall/bad-signature.c
@@ -17,6 +17,7 @@ int main() {
   fprintf(stderr, "1\n");
 
   // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG: bad-signature.c:[[@LINE-8]]{{(:[0-9]+)?}}: note: f defined here
   ((void (*)(int))f)(42); // UB here
 
diff --git a/compiler-rt/test/cfi/lit.cfg.py b/compiler-rt/test/cfi/lit.cfg.py
index c879d7f46e6be..79f9e39ce2e30 100644
--- a/compiler-rt/test/cfi/lit.cfg.py
+++ b/compiler-rt/test/cfi/lit.cfg.py
@@ -63,8 +63,10 @@ def build_invocation(compile_flags):
 else:
     config.unsupported = True
 
-if config.default_sanitizer_opts:
-    config.environment["UBSAN_OPTIONS"] = ":".join(config.default_sanitizer_opts)
+default_ubsan_opts = list(config.default_sanitizer_opts) if config.default_sanitizer_opts else []
+default_ubsan_opts.append("print_summary=1")
+default_ubsan_opts.append("report_error_type=1")
+config.environment["UBSAN_OPTIONS"] = ":".join(default_ubsan_opts)
 
 if lit_config.params.get("check_supported", None) and config.unsupported:
     raise BaseException("Tests unsupported")
diff --git a/compiler-rt/test/cfi/mfcall.cpp b/compiler-rt/test/cfi/mfcall.cpp
index f95251f5adb44..999e1996e501b 100644
--- a/compiler-rt/test/cfi/mfcall.cpp
+++ b/compiler-rt/test/cfi/mfcall.cpp
@@ -63,27 +63,32 @@ int main(int argc, char **argv) {
   switch (argv[1][0]) {
     case 'a':
       // A: runtime error: control flow integrity check for type 'int (S::*)()' failed during non-virtual pointer to member function call
+      // A: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
       // A: note: S::f1() {{.*}}defined here
       (s.*bitcast<S_int>(&S::f1))();
       break;
     case 'b':
       // B: runtime error: control flow integrity check for type 'int (T::*)()' failed during non-virtual pointer to member function call
+      // B: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
       // B: note: S::f2() {{.*}}defined here
       (t.*bitcast<T_int>(&S::f2))();
       break;
     case 'c':
       // C: runtime error: control flow integrity check for type 'int (S::*)()' failed during virtual pointer to member function call
       // C: note: vtable is of type 'S'
+      // C: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
       (s.*bitcast<S_int>(&S::g1))();
       break;
     case 'd':
       // D: runtime error: control flow integrity check for type 'int (S::*)()' failed during virtual pointer to member function call
       // D: note: vtable is of type 'T'
+      // D: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
       (reinterpret_cast<S &>(t).*&S::g2)();
       break;
     case 'e':
       // E: runtime error: control flow integrity check for type 'void (S::*)()' failed during virtual pointer to member function call
       // E: note: vtable is of type 'S'
+      // E: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
       (s.*bitcast<S_void>(&T::g3))();
       break;
     case 'f':
diff --git a/compiler-rt/test/cfi/multiple-inheritance.cpp b/compiler-rt/test/cfi/multiple-inheritance.cpp
index b8520d8b08b10..84ce8619f412e 100644
--- a/compiler-rt/test/cfi/multiple-inheritance.cpp
+++ b/compiler-rt/test/cfi/multiple-inheritance.cpp
@@ -60,10 +60,12 @@ int main(int argc, char **argv) {
     A *a = c;
     // CFI-DIAG1: runtime error: control flow integrity check for type 'B' failed during cast to unrelated type
     // CFI-DIAG1-NEXT: note: vtable is of type '{{(struct )?}}C'
+    // CFI-DIAG1: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     ((B *)a)->g(); // UB here
   } else {
     // CFI-DIAG2: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
     // CFI-DIAG2-NEXT: note: vtable is of type '{{(struct )?}}C'
+    // CFI-DIAG2: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
     B *b = c;
     ((A *)b)->f(); // UB here
   }
diff --git a/compiler-rt/test/cfi/nvcall.cpp b/compiler-rt/test/cfi/nvcall.cpp
index b61adb1fed064..2ad50823fb619 100644
--- a/compiler-rt/test/cfi/nvcall.cpp
+++ b/compiler-rt/test/cfi/nvcall.cpp
@@ -51,6 +51,7 @@ int main() {
 
   // CFI-DIAG: runtime error: control flow integrity check for type 'B' failed during non-virtual call
   // CFI-DIAG-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   ((B *)a)->f(); // UB here
 
   // CFI-NOT: {{^2$}}
diff --git a/compiler-rt/test/cfi/overwrite.cpp b/compiler-rt/test/cfi/overwrite.cpp
index 7d7ad1c77f0cb..abd1722a72530 100644
--- a/compiler-rt/test/cfi/overwrite.cpp
+++ b/compiler-rt/test/cfi/overwrite.cpp
@@ -52,6 +52,7 @@ int main() {
   // CFI-NOT: foo
   // NCFI: foo
   // CFI-DIAG: runtime error: control flow integrity check for type 'A' failed during virtual call
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG-NEXT: note: invalid vtable
   a->f();
 
diff --git a/compiler-rt/test/cfi/simple-fail.cpp b/compiler-rt/test/cfi/simple-fail.cpp
index ef36fb08ab4e0..7da02c75d1096 100644
--- a/compiler-rt/test/cfi/simple-fail.cpp
+++ b/compiler-rt/test/cfi/simple-fail.cpp
@@ -91,8 +91,10 @@ int main() {
 
   // CFI-DIAG: runtime error: control flow integrity check for type 'B' failed during cast to unrelated type
   // CFI-DIAG-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CFI-DIAG: runtime error: control flow integrity check for type 'B' failed during virtual call
   // CFI-DIAG-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   ((B *)a)->f(); // UB here
 
   // CFI-NOT: {{^2$}}
diff --git a/compiler-rt/test/cfi/target_uninstrumented.cpp b/compiler-rt/test/cfi/target_uninstrumented.cpp
index d92cb4cf61ff0..ac7e3b0c4cf85 100644
--- a/compiler-rt/test/cfi/target_uninstrumented.cpp
+++ b/compiler-rt/test/cfi/target_uninstrumented.cpp
@@ -33,12 +33,14 @@ void A::f() {}
 int main(int argc, char *argv[]) {
   void *p = create_B();
   // CHECK: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
+  // CHECK: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CHECK: invalid vtable
   // CHECK: check failed in {{.*}}, vtable located in {{.*}}libtarget_uninstrumented.cpp.dynamic.so
   A *a = (A *)p;
   memset(p, 0, sizeof(A));
 
   // CHECK: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
+  // CHECK: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   // CHECK: invalid vtable
   // CHECK: check failed in {{.*}}, vtable located in (unknown)
   a = (A *)p;
diff --git a/compiler-rt/test/cfi/vdtor.cpp b/compiler-rt/test/cfi/vdtor.cpp
index defa4ce15f50e..1d90653b061f0 100644
--- a/compiler-rt/test/cfi/vdtor.cpp
+++ b/compiler-rt/test/cfi/vdtor.cpp
@@ -48,6 +48,7 @@ int main() {
 
   // CFI-DIAG: runtime error: control flow integrity check for type 'B' failed during virtual call
   // CFI-DIAG-NEXT: note: vtable is of type '{{(struct )?}}A'
+  // CFI-DIAG: SUMMARY: UndefinedBehaviorSanitizer: cfi-bad-type
   delete (B *)a; // UB here
 
   // CFI-NOT: {{^2$}}

>From 5ade1323afde003f0806eeade5956d3eff2aecb2 Mon Sep 17 00:00:00 2001
From: Jakob Koschel <jakobkoschel at google.com>
Date: Mon, 29 Jun 2026 09:15:50 +0000
Subject: [PATCH 2/2] Fix python lint

Created using spr 1.3.7
---
 compiler-rt/test/cfi/lit.cfg.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/compiler-rt/test/cfi/lit.cfg.py b/compiler-rt/test/cfi/lit.cfg.py
index 79f9e39ce2e30..ee8a2a5983b37 100644
--- a/compiler-rt/test/cfi/lit.cfg.py
+++ b/compiler-rt/test/cfi/lit.cfg.py
@@ -63,7 +63,9 @@ def build_invocation(compile_flags):
 else:
     config.unsupported = True
 
-default_ubsan_opts = list(config.default_sanitizer_opts) if config.default_sanitizer_opts else []
+default_ubsan_opts = (
+    list(config.default_sanitizer_opts) if config.default_sanitizer_opts else []
+)
 default_ubsan_opts.append("print_summary=1")
 default_ubsan_opts.append("report_error_type=1")
 config.environment["UBSAN_OPTIONS"] = ":".join(default_ubsan_opts)



More information about the llvm-commits mailing list