diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-09-04 13:28:14 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-09-04 13:28:14 +0000 |
commit | ed39f58390c72bc8c8d7358b286f5c7860f553e2 (patch) | |
tree | 3852245a94967e0faaf1adf9f386969467db10c8 /clang/test/CodeGen/mips-zero-sized-struct.c | |
parent | d3b10d9daf04ee6428c89b1c0e26dc0d94cb53ab (diff) | |
download | bcm5719-llvm-ed39f58390c72bc8c8d7358b286f5c7860f553e2.tar.gz bcm5719-llvm-ed39f58390c72bc8c8d7358b286f5c7860f553e2.zip |
[mips] Zero-sized structs cannot be ignored in MipsABIInfo::classifyReturnType() for O32
Summary:
They are returned indirectly which causes the other arguments to move to
the next argument slot.
With this, utils/ABITest does not discover any failing cases in the first
500 attempts on big/little endian for O32. Previously some of these failed.
Also tested N32/N64 little endian (big endian has other known issues) with
no issues.
Reviewers: atanasyan
Reviewed By: atanasyan
Subscribers: atanasyan, cfe-commits
Differential Revision: http://reviews.llvm.org/D4811
llvm-svn: 217147
Diffstat (limited to 'clang/test/CodeGen/mips-zero-sized-struct.c')
-rw-r--r-- | clang/test/CodeGen/mips-zero-sized-struct.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/CodeGen/mips-zero-sized-struct.c b/clang/test/CodeGen/mips-zero-sized-struct.c new file mode 100644 index 00000000000..afff3b41d83 --- /dev/null +++ b/clang/test/CodeGen/mips-zero-sized-struct.c @@ -0,0 +1,16 @@ +// RUN: %clang -target mips-unknown-linux-gnu -S -emit-llvm -o - %s | FileCheck -check-prefix=O32 %s +// RUN: %clang -target mipsel-unknown-linux-gnu -S -emit-llvm -o - %s | FileCheck -check-prefix=O32 %s +// RUN: %clang -target mips64-unknown-linux-gnu -S -emit-llvm -o - %s -mabi=n32 | FileCheck -check-prefix=N32 %s +// RUN: %clang -target mips64el-unknown-linux-gnu -S -emit-llvm -o - %s -mabi=n32 | FileCheck -check-prefix=N32 %s +// RUN: %clang -target mips64-unknown-linux-gnu -S -emit-llvm -o - %s | FileCheck -check-prefix=N64 %s +// RUN: %clang -target mips64el-unknown-linux-gnu -S -emit-llvm -o - %s | FileCheck -check-prefix=N64 %s + +// O32: define void @fn28(%struct.T2* noalias sret %agg.result, i8 signext %arg0) +// N32: define void @fn28(i8 signext %arg0) +// N64: define void @fn28(i8 signext %arg0) + +typedef struct T2 { } T2; +T2 T2_retval; +T2 fn28(char arg0) { + return T2_retval; +} |