diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-03-11 18:19:55 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-03-11 18:19:55 +0000 |
| commit | 9723d6c699286bdf5cb18b935d4233191997702f (patch) | |
| tree | 2c198cdbdc8dfe96dd49d7d64552e8aa22b288bd /clang/lib/CodeGen | |
| parent | 66187b3c6e9cd7254c1d9b056171c34276008b17 (diff) | |
| download | bcm5719-llvm-9723d6c699286bdf5cb18b935d4233191997702f.tar.gz bcm5719-llvm-9723d6c699286bdf5cb18b935d4233191997702f.zip | |
fix PR6433, crash on va_arg of typedef.
llvm-svn: 98264
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/TargetInfo.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index e658cad5f2a..59e8e77756c 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -268,16 +268,15 @@ llvm::Value *DefaultABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, ABIArgInfo DefaultABIInfo::classifyArgumentType(QualType Ty, ASTContext &Context, llvm::LLVMContext &VMContext) const { - if (CodeGenFunction::hasAggregateLLVMType(Ty)) { + if (CodeGenFunction::hasAggregateLLVMType(Ty)) return ABIArgInfo::getIndirect(0); - } else { - // Treat an enum type as its underlying type. - if (const EnumType *EnumTy = Ty->getAs<EnumType>()) - Ty = EnumTy->getDecl()->getIntegerType(); + + // Treat an enum type as its underlying type. + if (const EnumType *EnumTy = Ty->getAs<EnumType>()) + Ty = EnumTy->getDecl()->getIntegerType(); - return (Ty->isPromotableIntegerType() ? - ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); - } + return (Ty->isPromotableIntegerType() ? + ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } /// X86_32ABIInfo - The X86-32 ABI information. @@ -1367,6 +1366,8 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, // i8* reg_save_area; // }; unsigned neededInt, neededSSE; + + Ty = CGF.getContext().getCanonicalType(Ty); ABIArgInfo AI = classifyArgumentType(Ty, CGF.getContext(), VMContext, neededInt, neededSSE); |

