[llvm] [StackProtector] Introduce stack-protect-refinement pass to remove unnecessary protections. (PR #150390)
Paul T Robinson via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 4 08:33:12 PDT 2025
================
@@ -0,0 +1,64 @@
+// RUN: clang -O2 -fstack-protector-strong -emit-llvm -S %s -o - | FileCheck %s
+
+
+
+__attribute__((noinline))
+int foo1(int *p) {
+ return p[10];
+}
+int bar1() {
+// CHECK-LABEL: define {{[^@]+}}@bar1
+// CHECK-SAME: () local_unnamed_addr #[[ATTR1:[0-9]+]] {
+ int x[128];
+ return foo1(x);
+}
+
+__attribute__((noinline))
+int foo2(int *p) {
+ return p[1000];
+}
+int bar2() {
+// CHECK-LABEL: define {{[^@]+}}@bar2
+// CHECK-SAME: () local_unnamed_addr #[[ATTR2:[0-9]+]] {
+ int x[128];
+ return foo2(x);
+}
+
+int k;
+__attribute__((noinline))
+int foo3(int *p) {
+ return p[k];
+}
+int bar3() {
+// CHECK-LABEL: define {{[^@]+}}@bar3
+// CHECK-SAME: () local_unnamed_addr #[[ATTR3:[0-9]+]] {
+ int x[128];
+ return foo3(x);
+}
+
+__attribute__((noinline))
+int foo4(int *p);
+int bar4() {
+// CHECK-LABEL: define {{[^@]+}}@bar4
+// CHECK-SAME: () local_unnamed_addr #[[ATTR4:[0-9]+]] {
+ int x[128];
+ return foo4(x);
+}
+
+int bar5() {
+// CHECK-LABEL: define {{[^@]+}}@bar5
+// CHECK-SAME: () local_unnamed_addr #[[ATTR5:[0-9]+]] {
+ int x[128];
+ int i;
+ for (i = 0; i < 128; ++i)
+ x[i] = i;
+ return foo1(x);
+}
+
+//.
+// CHECK-NOT: attributes #[[ATTR1]] = {{.* sspstrong}}
----------------
pogo59 wrote:
```suggestion
// CHECK: attributes #[[ATTR1]] =
// CHECK-NOT: sspstrong
```
Not a big deal but slightly more robust IMO to have positive checks for each attribute number
https://github.com/llvm/llvm-project/pull/150390
More information about the llvm-commits
mailing list