зеркало из https://github.com/microsoft/clang-1.git
Support va_arg on _Complex.
gcc compat test suite results (Darwin x86-32 & -64): -- # of expected passes 1110 # of unexpected failures 74 # of unresolved testcases 168 # of unsupported tests 2 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64197 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4004226773
Коммит
4e484b8134
|
@ -192,6 +192,8 @@ public:
|
|||
ComplexPairTy VisitChooseExpr(ChooseExpr *CE);
|
||||
|
||||
ComplexPairTy VisitInitListExpr(InitListExpr *E);
|
||||
|
||||
ComplexPairTy VisitVAArgExpr(VAArgExpr *E);
|
||||
};
|
||||
} // end anonymous namespace.
|
||||
|
||||
|
@ -528,6 +530,22 @@ ComplexPairTy ComplexExprEmitter::VisitInitListExpr(InitListExpr *E) {
|
|||
return ComplexPairTy(zeroConstant, zeroConstant);
|
||||
}
|
||||
|
||||
ComplexPairTy ComplexExprEmitter::VisitVAArgExpr(VAArgExpr *E) {
|
||||
llvm::Value *ArgValue = CGF.EmitLValue(E->getSubExpr()).getAddress();
|
||||
llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, E->getType());
|
||||
|
||||
if (!ArgPtr) {
|
||||
CGF.ErrorUnsupported(E, "complex va_arg expression");
|
||||
const llvm::Type *EltTy =
|
||||
CGF.ConvertType(E->getType()->getAsComplexType()->getElementType());
|
||||
llvm::Value *U = llvm::UndefValue::get(EltTy);
|
||||
return ComplexPairTy(U, U);
|
||||
}
|
||||
|
||||
// FIXME Volatility.
|
||||
return EmitLoadOfComplex(ArgPtr, false);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Entry Point into this File
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -103,6 +103,7 @@ void f4(int a0, int a1, int a2, va_list ap) {
|
|||
int t12_0 = __builtin_classify_type(t0);
|
||||
int t12_1 = __builtin_classify_type(t1);
|
||||
int t12_2 = __builtin_classify_type(t2);
|
||||
// FIXME: Add _Complex and aggregate cases.
|
||||
int t13 = va_arg(ap, int);
|
||||
va_list t13_0;
|
||||
va_copy(t13_0, ap);
|
||||
|
|
Загрузка…
Ссылка в новой задаче