https://github.com/rsashka updated 
https://github.com/llvm/llvm-project/pull/173181

>From 307629b7aa506746d4f0bcc5ac2513d7038c7abc Mon Sep 17 00:00:00 2001
From: Aleksandr Ryabikov <[email protected]>
Date: Sun, 21 Dec 2025 11:56:03 +0300
Subject: [PATCH] The return address size has been added to the function stack
 size on the x86 platform, and a check that takes into account compiler
 optimization settings has been added to the -fstack_usage compiler option
 tests.

---
 clang/test/CodeGen/stack-usage.c           | 21 +++++++++++++++++----
 llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp |  9 +++++++--
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/clang/test/CodeGen/stack-usage.c b/clang/test/CodeGen/stack-usage.c
index c9f495605fefd..e1778b0f62d5f 100644
--- a/clang/test/CodeGen/stack-usage.c
+++ b/clang/test/CodeGen/stack-usage.c
@@ -1,11 +1,24 @@
 // REQUIRES: aarch64-registered-target
+// REQUIRES: x86-registered-target
 
 // RUN: rm -rf %t && split-file %s %t && cd %t
-// RUN: %clang_cc1 -triple aarch64-unknown -I . -stack-usage-file a.su 
-emit-obj a.c -o a.o
-// RUN: FileCheck %s < a.su
+// RUN: %clang_cc1 -triple aarch64-unknown -O0 -I . -stack-usage-file a-O0.su 
-emit-obj a.c -o a-O0.o
+// RUN: FileCheck %s < a-O0.su -check-prefix=O0
+// RUN: %clang_cc1 -triple aarch64-unknown -O3 -I . -stack-usage-file a-O3.su 
-emit-obj a.c -o a-O3.o
+// RUN: FileCheck %s < a-O3.su -check-prefix=O3
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -I . -stack-usage-file 
a-x86.su -emit-obj a.c -o a-x86.o
+// RUN: FileCheck %s < a-x86.su -check-prefix=x86
+
+// O0: {{.*}}x.inc:1:bar       [[#]]   dynamic
+// O0: a.c:2:foo       [[#]]   static
+
+// O3: {{.*}}x.inc:1:bar       [[#]]   static
+// O3: a.c:2:foo       [[#]]   static
+
+// For x86 stack usage must be greater than zero
+// x86: {{.*}}x.inc:1:bar {{[1-9][0-9]*}} static
+// x86: a.c:2:foo {{[1-9][0-9]*}} static
 
-// CHECK: {{.*}}x.inc:1:bar    [[#]]   dynamic
-// CHECK: a.c:2:foo    [[#]]   static
 //--- a.c
 #include "x.inc"
 int foo() {
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp 
b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 4d2992456f6f8..1ded0211e465c 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1679,9 +1679,14 @@ void AsmPrinter::emitStackUsage(const MachineFunction 
&MF) {
     return;
 
   const MachineFrameInfo &FrameInfo = MF.getFrameInfo();
-  uint64_t StackSize =
+  uint64_t StackSize = 
       FrameInfo.getStackSize() + FrameInfo.getUnsafeStackSize();
-
+  
+  // Increase the stack size for the return address on x86
+  if(MF.getTarget().getTargetTriple().isX86()){
+    StackSize += MF.getTarget().getAllocaPointerSize();
+  }
+  
   if (StackUsageStream == nullptr) {
     std::error_code EC;
     StackUsageStream =

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

Reply via email to