https://github.com/benshi001 updated 
https://github.com/llvm/llvm-project/pull/131976

>From 163c73d21af736c94f1bb8f8c63caf96e127aba5 Mon Sep 17 00:00:00 2001
From: Ben Shi <benn...@tencent.com>
Date: Wed, 19 Mar 2025 13:21:48 +0800
Subject: [PATCH 1/3] [clang][CodeGen][AVR] Fix a crash in AVRABIInfo

fixes https://github.com/llvm/llvm-project/issues/131967
---
 clang/lib/CodeGen/Targets/AVR.cpp |  7 ++++---
 clang/test/CodeGen/avr/argument.c | 10 ++++++++++
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/AVR.cpp 
b/clang/lib/CodeGen/Targets/AVR.cpp
index 26e2a22f14d1e..d0def86376f89 100644
--- a/clang/lib/CodeGen/Targets/AVR.cpp
+++ b/clang/lib/CodeGen/Targets/AVR.cpp
@@ -59,7 +59,7 @@ class AVRABIInfo : public DefaultABIInfo {
     unsigned TySize = getContext().getTypeSize(Ty);
 
     // An int8 type argument always costs two registers like an int16.
-    if (TySize == 8 && NumRegs >= 2) {
+    if (TySize == 8 && NumRegs >= 2 && Ty->isIntegralOrEnumerationType()) {
       NumRegs -= 2;
       return ABIArgInfo::getExtend(Ty);
     }
@@ -135,7 +135,8 @@ class AVRTargetCodeGenInfo : public TargetCodeGenInfo {
     if (GV->isDeclaration())
       return;
     const auto *FD = dyn_cast_or_null<FunctionDecl>(D);
-    if (!FD) return;
+    if (!FD)
+      return;
     auto *Fn = cast<llvm::Function>(GV);
 
     if (FD->getAttr<AVRInterruptAttr>())
@@ -145,7 +146,7 @@ class AVRTargetCodeGenInfo : public TargetCodeGenInfo {
       Fn->addFnAttr("signal");
   }
 };
-}
+} // namespace
 
 std::unique_ptr<TargetCodeGenInfo>
 CodeGen::createAVRTargetCodeGenInfo(CodeGenModule &CGM, unsigned NPR,
diff --git a/clang/test/CodeGen/avr/argument.c 
b/clang/test/CodeGen/avr/argument.c
index 31bf678c05a54..5f4b300f350ae 100644
--- a/clang/test/CodeGen/avr/argument.c
+++ b/clang/test/CodeGen/avr/argument.c
@@ -114,3 +114,13 @@ struct s15 fooa(char a, char b) {
   x.arr[1] = b;
   return x;
 }
+
+struct s8_t {
+  char a;
+};
+
+// AVR-NOT:  {{.*}} signext
+// TINY-NOT: {{.*}} signext
+char foob(struct s8_t a) {
+  return a.a + 1;
+}

>From db000cf7c012ebe8d7fb30e47089b61b7ad9c045 Mon Sep 17 00:00:00 2001
From: Ben Shi <benn...@tencent.com>
Date: Thu, 20 Mar 2025 09:02:21 +0800
Subject: [PATCH 2/3] [clang][CodeGen][AVR] Fix a crash in AVRABIInfo

fixes https://github.com/llvm/llvm-project/issues/131967
---
 clang/lib/CodeGen/Targets/AVR.cpp | 5 ++---
 clang/test/CodeGen/avr/argument.c | 4 ++--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/AVR.cpp 
b/clang/lib/CodeGen/Targets/AVR.cpp
index d0def86376f89..5399d12f7ce80 100644
--- a/clang/lib/CodeGen/Targets/AVR.cpp
+++ b/clang/lib/CodeGen/Targets/AVR.cpp
@@ -135,8 +135,7 @@ class AVRTargetCodeGenInfo : public TargetCodeGenInfo {
     if (GV->isDeclaration())
       return;
     const auto *FD = dyn_cast_or_null<FunctionDecl>(D);
-    if (!FD)
-      return;
+    if (!FD) return;
     auto *Fn = cast<llvm::Function>(GV);
 
     if (FD->getAttr<AVRInterruptAttr>())
@@ -146,7 +145,7 @@ class AVRTargetCodeGenInfo : public TargetCodeGenInfo {
       Fn->addFnAttr("signal");
   }
 };
-} // namespace
+}
 
 std::unique_ptr<TargetCodeGenInfo>
 CodeGen::createAVRTargetCodeGenInfo(CodeGenModule &CGM, unsigned NPR,
diff --git a/clang/test/CodeGen/avr/argument.c 
b/clang/test/CodeGen/avr/argument.c
index 5f4b300f350ae..a7682f4ed6299 100644
--- a/clang/test/CodeGen/avr/argument.c
+++ b/clang/test/CodeGen/avr/argument.c
@@ -119,8 +119,8 @@ struct s8_t {
   char a;
 };
 
-// AVR-NOT:  {{.*}} signext
-// TINY-NOT: {{.*}} signext
+// AVR:  define {{.*}} i8 @foob(i8 {{.*}})
+// TINY  define {{.*}} i8 @foob(i8 {{.*}})
 char foob(struct s8_t a) {
   return a.a + 1;
 }

>From 3864ab2200c5cf8107c9fe29c3d4092d90b80c30 Mon Sep 17 00:00:00 2001
From: Ben Shi <benn...@tencent.com>
Date: Fri, 21 Mar 2025 12:56:11 +0800
Subject: [PATCH 3/3] fix test

---
 clang/test/CodeGen/avr/argument.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/CodeGen/avr/argument.c 
b/clang/test/CodeGen/avr/argument.c
index a7682f4ed6299..1776cd7cf2c01 100644
--- a/clang/test/CodeGen/avr/argument.c
+++ b/clang/test/CodeGen/avr/argument.c
@@ -120,7 +120,7 @@ struct s8_t {
 };
 
 // AVR:  define {{.*}} i8 @foob(i8 {{.*}})
-// TINY  define {{.*}} i8 @foob(i8 {{.*}})
+// TINY: define {{.*}} i8 @foob(i8 {{.*}})
 char foob(struct s8_t a) {
   return a.a + 1;
 }

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to