[clang] [Clang] Add GCC's __builtin_stack_address() to Clang. (PR #121332)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 30 12:21:33 PST 2025


================
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -triple i686-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=X86 %s
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=X86_64 %s
+// RUN: %clang_cc1 -triple riscv32-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=RISCV_ARM_32 %s
+// RUN: %clang_cc1 -triple riscv64-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=RISCV_ARM_64 %s
+// RUN: %clang_cc1 -triple arm-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=RISCV_ARM_32 %s
+// RUN: %clang_cc1 -triple arm64-unknown-unknown -emit-llvm -o - %s | FileCheck -check-prefix=RISCV_ARM_64 %s
+
+void* a() {
+  // X86_64: [[INT_SP:%.*]] = call i64 @llvm.read_register.i64(metadata [[SPREG:![0-9]+]])
+  // X86_64: inttoptr i64 [[INT_SP]]
+  // X86_64: [[SPREG]] = !{!"rsp"}
+  //
+  // X86: [[INT_SP:%.*]] = call i32 @llvm.read_register.i32(metadata [[SPREG:![0-9]+]])
+  // X86: inttoptr i32 [[INT_SP]]
+  // X86: [[SPREG]] = !{!"esp"}
+  //
+  // RISCV_ARM_32: [[INT_SP:%.*]] = call i32 @llvm.read_register.i32(metadata [[SPREG:![0-9]+]])
+  // RISCV_ARM_32: inttoptr i32 [[INT_SP]]
+  // RISCV_ARM_32: [[SPREG]] = !{!"sp"}
+  //
+  // RISCV_ARM_64: [[INT_SP:%.*]] = call i64 @llvm.read_register.i64(metadata [[SPREG:![0-9]+]])
+  // RISCV_ARM_64: inttoptr i64 [[INT_SP]]
+  // RISCV_ARM_64: [[SPREG]] = !{!"sp"}
+  return __builtin_stack_address();
----------------
AaronBallman wrote:

We definitely need some tests in `clang/test/Sema` for things like diagnosing passing arguments to the function and verifying the function's return type.

But also, we may want codegen tests for more interesting scenarios (member functions in C++, lambdas in C++, functions marked with the `leaf` attribute, etc).

https://github.com/llvm/llvm-project/pull/121332


More information about the cfe-commits mailing list