From: Chris Lattner Date: Mon, 5 Jan 2009 18:27:50 +0000 (+0000) Subject: reject PR3281:crash11.ll with: X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=830703b1bd88511e29eec76b1fd146524bc9c5a1;p=oota-llvm.git reject PR3281:crash11.ll with: llvm-as: crash11.ll:2:27: function may not return return opaque type "xw" = tail call opaque @608(label %31) ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61722 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index c13737aae52..a9f8e192d38 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -602,11 +602,17 @@ GlobalValue *LLParser::GetGlobalVal(unsigned ID, const Type *Ty, LocTy Loc) { // Otherwise, create a new forward reference for this value and remember it. GlobalValue *FwdVal; - if (const FunctionType *FT = dyn_cast(PTy->getElementType())) + if (const FunctionType *FT = dyn_cast(PTy->getElementType())) { + // Function types can return opaque but functions can't. + if (isa(FT->getReturnType())) { + Error(Loc, "function may not return return opaque type"); + return 0; + } FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M); - else + } else { FwdVal = new GlobalVariable(PTy->getElementType(), false, GlobalValue::ExternalWeakLinkage, 0, "", M); + } ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc); return FwdVal;