diff options
author | Roman Divacky <rdivacky@FreeBSD.org> | 2010-05-27 15:17:06 +0000 |
---|---|---|
committer | Roman Divacky <rdivacky@FreeBSD.org> | 2010-05-27 15:17:06 +0000 |
commit | d7279c4c177bca357ef96ff1379fd9bc420bfe83 (patch) | |
tree | 3558f327a6f9ab59c5d7a06528d84e1560445247 /test/CodeGenCXX/x86_32-arguments.cpp | |
parent | be17651f5cd2e94922c1b732bc8589e180698193 (diff) | |
download | src-d7279c4c177bca357ef96ff1379fd9bc420bfe83.tar.gz src-d7279c4c177bca357ef96ff1379fd9bc420bfe83.zip |
Update clang to r104832.vendor/clang/clang-r104832
Notes
Notes:
svn path=/vendor/clang/dist/; revision=208600
svn path=/vendor/clang/clang-r104832/; revision=208977; tag=vendor/clang/clang-r104832
Diffstat (limited to 'test/CodeGenCXX/x86_32-arguments.cpp')
-rw-r--r-- | test/CodeGenCXX/x86_32-arguments.cpp | 96 |
1 files changed, 94 insertions, 2 deletions
diff --git a/test/CodeGenCXX/x86_32-arguments.cpp b/test/CodeGenCXX/x86_32-arguments.cpp index f8d655145b8f..023b7297c7d7 100644 --- a/test/CodeGenCXX/x86_32-arguments.cpp +++ b/test/CodeGenCXX/x86_32-arguments.cpp @@ -1,9 +1,9 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple i386-apple-darwin9 -emit-llvm -o - %s | FileCheck %s // Non-trivial dtors, should both be passed indirectly. struct S { ~S(); - int s; + short s; }; // CHECK: define void @_Z1fv(%struct.S* sret % @@ -13,6 +13,7 @@ void f(S) { } // Non-trivial dtors, should both be passed indirectly. class C { +public: ~C(); double c; }; @@ -22,3 +23,94 @@ C g() { return C(); } // CHECK: define void @_Z1f1C(%class.C*) void f(C) { } + + + + +// PR7058 - Missing byval on MI thunk definition. + +// CHECK: define void @_ZThn4_N18BasicAliasAnalysis13getModRefInfoE8CallSite +// ... +// CHECK: %struct.CallSite* byval %CS) +struct CallSite { + unsigned Ptr; + CallSite(unsigned XX) : Ptr(XX) {} +}; + +struct AliasAnalysis { + virtual void xyz(); + virtual void getModRefInfo(CallSite CS) = 0; +}; + +struct ModulePass { + virtual void xx(); +}; + +struct BasicAliasAnalysis : public ModulePass, public AliasAnalysis { + void getModRefInfo(CallSite CS); +}; + +void BasicAliasAnalysis::getModRefInfo(CallSite CS) { +} + +// Check various single element struct type conditions. +// +// PR7098. + +// CHECK: define i64 @_Z2f0v() +struct s0_0 { int x; }; +struct s0_1 : s0_0 { int* y; }; +s0_1 f0() { return s0_1(); } + +// CHECK: define i32 @_Z2f1v() +struct s1_0 { int x; }; +struct s1_1 : s1_0 { }; +s1_1 f1() { return s1_1(); } + +// CHECK: define double @_Z2f2v() +struct s2_0 { double x; }; +struct s2_1 : s2_0 { }; +s2_1 f2() { return s2_1(); } + +// CHECK: define double @_Z2f3v() +struct s3_0 { }; +struct s3_1 { double x; }; +struct s3_2 : s3_0, s3_1 { }; +s3_2 f3() { return s3_2(); } + +// CHECK: define i64 @_Z2f4v() +struct s4_0 { float x; }; +struct s4_1 { float x; }; +struct s4_2 : s4_0, s4_1 { }; +s4_2 f4() { return s4_2(); } + +// CHECK: define i32 @_Z2f5v() +struct s5 { s5(); int &x; }; +s5 f5() { return s5(); } + +// CHECK: define i32 @_Z4f6_0M2s6i(i32 %a) +// CHECK: define i64 @_Z4f6_1M2s6FivE(%{{.*}} byval %a) +// FIXME: It would be nice to avoid byval on the previous case. +struct s6 {}; +typedef int s6::* s6_mdp; +typedef int (s6::*s6_mfp)(); +s6_mdp f6_0(s6_mdp a) { return a; } +s6_mfp f6_1(s6_mfp a) { return a; } + +// CHECK: define double @_Z2f7v() +struct s7_0 { unsigned : 0; }; +struct s7_1 { double x; }; +struct s7 : s7_0, s7_1 { }; +s7 f7() { return s7(); } + +// CHECK: define void @_Z2f8v(%struct.s8* sret %agg.result) +struct s8_0 { }; +struct s8_1 { double x; }; +struct s8 { s8_0 a; s8_1 b; }; +s8 f8() { return s8(); } + +// CHECK: define void @_Z2f9v(%struct.s9* sret %agg.result) +struct s9_0 { unsigned : 0; }; +struct s9_1 { double x; }; +struct s9 { s9_0 a; s9_1 b; }; +s9 f9() { return s9(); } |