From 5bde6f41506535ddaf6e9ff60bd1488db8ded952 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 31 Mar 2009 19:01:39 +0000 Subject: [PATCH] x86_32 Darwin ABI: Treat empty unions like empty structures. - 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 | 10 +++++----- test/CodeGen/x86_32-arguments.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 8217b046a3..291e476f0b 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -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; diff --git a/test/CodeGen/x86_32-arguments.c b/test/CodeGen/x86_32-arguments.c index 632949e763..9334895186 100644 --- a/test/CodeGen/x86_32-arguments.c +++ b/test/CodeGen/x86_32-arguments.c @@ -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 + -- 2.40.0