]> granicus.if.org Git - clang/commitdiff
x86_32 Darwin ABI: Treat empty unions like empty structures.
authorDaniel Dunbar <daniel@zuster.org>
Tue, 31 Mar 2009 19:01:39 +0000 (19:01 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 31 Mar 2009 19:01:39 +0000 (19:01 +0000)
 - Current return-arguments-32 status: 15/1000 failures

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68132 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp
test/CodeGen/x86_32-arguments.c

index 8217b046a390daf72aaf8e0702575c1eae695b8d..291e476f0bd719e9f67d0147f9f71d0cdd9558f7 100644 (file)
@@ -140,11 +140,11 @@ void ABIArgInfo::dump() const {
 
 /***/
 
-/// isEmptyStruct - Return true iff a structure has no non-empty
+/// isEmptyRecord - Return true iff a structure has no non-empty
 /// members. Note that a structure with a flexible array member is not
 /// considered empty.
-static bool isEmptyStruct(QualType T) {
-  const RecordType *RT = T->getAsStructureType();
+static bool isEmptyRecord(QualType T) {
+  const RecordType *RT = T->getAsRecordType();
   if (!RT)
     return 0;
   const RecordDecl *RD = RT->getDecl();
@@ -153,7 +153,7 @@ static bool isEmptyStruct(QualType T) {
   for (RecordDecl::field_iterator i = RD->field_begin(), 
          e = RD->field_end(); i != e; ++i) {
     const FieldDecl *FD = *i;
-    if (!isEmptyStruct(FD->getType()))
+    if (!isEmptyRecord(FD->getType()))
       return false;
   }
   return true;
@@ -182,7 +182,7 @@ static const FieldDecl *isSingleElementStruct(QualType T) {
     const FieldDecl *FD = *i;
     QualType FT = FD->getType();
 
-    if (isEmptyStruct(FT)) {
+    if (isEmptyRecord(FT)) {
       // Ignore
     } else if (Found) {
       return 0;
index 632949e76317abd005d81d949fea775bce77f1f1..933489518627601f47a22b4d7042ae00054c04e2 100644 (file)
@@ -15,8 +15,6 @@
 // tests. This should be the same as @f8_2.
 // RUN: grep 'define void @f9_2(%.truct.s9\* byval %a0)' %t &&
 
-// RUN: true
-
 char f0(void) {
 }
 
@@ -65,3 +63,13 @@ struct s9 f9_1(void) {
 void f9_2(struct s9 a0) {
 }
 
+// Return of small structures and unions...
+
+// RUN: grep 'float @f10()' %t &&
+struct s10 {
+  union { };
+  float f;
+} f10(void) {}
+
+// RUN: true
+