diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 13df7fe97cc..0f2af204477 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -2057,6 +2057,9 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy; if (isVarArg) ParamTypes.pop_back(); + if (!(*$2)->isFirstClassType() && *$2 != Type::VoidTy) + ThrowException("LLVM functions cannot return aggregate types!"); + Ty = FunctionType::get($2->get(), ParamTypes, isVarArg); PFTy = PointerType::get(Ty); }