[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