forked from OSchip/llvm-project
IRgen: Switch 'retval' to use CreateIRTemp.
llvm-svn: 96376
This commit is contained in:
parent
29a32dab4a
commit
fd09df7839
|
@ -216,10 +216,10 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, QualType RetTy,
|
|||
} else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::Indirect &&
|
||||
hasAggregateLLVMType(CurFnInfo->getReturnType())) {
|
||||
// Indirect aggregate return; emit returned value directly into sret slot.
|
||||
// This reduces code size, and is also affects correctness in C++.
|
||||
// This reduces code size, and affects correctness in C++.
|
||||
ReturnValue = CurFn->arg_begin();
|
||||
} else {
|
||||
ReturnValue = CreateTempAlloca(ConvertType(RetTy), "retval");
|
||||
ReturnValue = CreateIRTemp(RetTy, "retval");
|
||||
}
|
||||
|
||||
EmitStartEHSpec(CurCodeDecl);
|
||||
|
|
|
@ -1,19 +1,28 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s
|
||||
//
|
||||
// CHECK: define void @f0
|
||||
// CHECK: alloca %struct.s0, align 16
|
||||
// CHECK: define void @f1
|
||||
// CHECK: alloca %struct.s0, align 16
|
||||
|
||||
struct s0 {
|
||||
int Start, End;
|
||||
unsigned Alignment;
|
||||
int TheStores __attribute__((aligned(16)));
|
||||
};
|
||||
|
||||
// CHECK: define void @f0
|
||||
// CHECK: alloca %struct.s0, align 16
|
||||
extern "C" void f0() {
|
||||
(void) s0();
|
||||
}
|
||||
|
||||
// CHECK: define void @f1
|
||||
// CHECK: alloca %struct.s0, align 16
|
||||
extern "C" void f1() {
|
||||
(struct s0) { 0, 0, 0, 0 };
|
||||
(void) (struct s0) { 0, 0, 0, 0 };
|
||||
}
|
||||
|
||||
// CHECK: define i64 @f2
|
||||
// CHECK: alloca %struct.s1, align 2
|
||||
struct s1 { short x; short y; };
|
||||
extern "C" struct s1 f2(int a, struct s1 *x, struct s1 *y) {
|
||||
if (a)
|
||||
return *x;
|
||||
return *y;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue