diff options
author | Dale Johannesen <dalej@apple.com> | 2009-06-22 04:47:32 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2009-06-22 04:47:32 +0000 |
commit | d3f7935f50c2850e79e4dd7cab2459c1eb2b67a2 (patch) | |
tree | 56fd54e5800f242b18c63b7d3ded0f49fa21d92d | |
parent | 692b46872e1610e69a887cb9927cc3f7f8034218 (diff) | |
download | bcm5719-llvm-d3f7935f50c2850e79e4dd7cab2459c1eb2b67a2.tar.gz bcm5719-llvm-d3f7935f50c2850e79e4dd7cab2459c1eb2b67a2.zip |
Testcase for (llvm-gcc) 73873. Usually
std::pair<double, float*>
is 16 bytes on darwin-powerpc, but not always.
See testcase for full weirdness.
llvm-svn: 73874
-rw-r--r-- | llvm/test/FrontendC++/2009-06-20-DarwinPPCLayout.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/FrontendC++/2009-06-20-DarwinPPCLayout.cpp b/llvm/test/FrontendC++/2009-06-20-DarwinPPCLayout.cpp new file mode 100644 index 00000000000..eef0e86e2ae --- /dev/null +++ b/llvm/test/FrontendC++/2009-06-20-DarwinPPCLayout.cpp @@ -0,0 +1,32 @@ +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep baz | grep global | grep {struct.bar} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep ccc | grep global | grep {struct.CC} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep quux | grep global | grep {struct.bar} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep foo | grep global | grep {struct.SRCFilter::FilterEntry} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep {struct.bar} | grep {1 x i32} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep {struct.CC} | grep {struct.bar} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep {struct.bar} | grep {1 x i32} +// RUN: %llvmgxx -S -m32 -emit-llvm %s -o - | grep {struct.SRCFilter::FilterEntry} | not grep {1 x i32} +// XFAIL: * +// XTARGET: powerpc-apple-darwin + +template<class _T1, class _T2> struct payre { + _T1 first; + _T2 second; + payre() : first(), second() { } +}; +struct KBFP { + double mCutoffFrequency; +}; +class SRCFilter { + struct FilterEntry: public payre<KBFP, float*>{}; + static FilterEntry foo; +}; +SRCFilter::FilterEntry SRCFilter::foo; // 12 bytes +payre<KBFP, float*> baz; // 16 bytes +class CC { // 16 bytes + public: payre<KBFP, float*> x; +}; +class CC ccc; + +struct bar { KBFP x; float* y;}; // 16 bytes +struct bar quux; |