Index: llvm/include/llvm/IR/Function.h =================================================================== --- llvm/include/llvm/IR/Function.h +++ llvm/include/llvm/IR/Function.h @@ -472,14 +472,12 @@ /// Extract the byval type for a parameter. Type *getParamByValType(unsigned ArgNo) const { - Type *Ty = AttributeSets.getParamByValType(ArgNo); - return Ty ? Ty : (arg_begin() + ArgNo)->getType()->getPointerElementType(); + return AttributeSets.getParamByValType(ArgNo); } /// Extract the sret type for a parameter. Type *getParamStructRetType(unsigned ArgNo) const { - Type *Ty = AttributeSets.getParamStructRetType(ArgNo); - return Ty ? Ty : (arg_begin() + ArgNo)->getType()->getPointerElementType(); + return AttributeSets.getParamStructRetType(ArgNo); } /// Extract the byref type for a parameter. Index: llvm/lib/AsmParser/LLParser.h =================================================================== --- llvm/lib/AsmParser/LLParser.h +++ llvm/lib/AsmParser/LLParser.h @@ -328,7 +328,6 @@ bool parseFnAttributeValuePairs(AttrBuilder &B, std::vector &FwdRefAttrGrps, bool inAttrGrp, LocTy &BuiltinLoc); - bool parseOptionalTypeAttr(Type *&Result, lltok::Kind AttrName); bool parseRequiredTypeAttr(Type *&Result, lltok::Kind AttrName); bool parsePreallocated(Type *&Result); bool parseByRef(Type *&Result); Index: llvm/lib/AsmParser/LLParser.cpp =================================================================== --- llvm/lib/AsmParser/LLParser.cpp +++ llvm/lib/AsmParser/LLParser.cpp @@ -1699,14 +1699,14 @@ } case lltok::kw_byval: { Type *Ty; - if (parseOptionalTypeAttr(Ty, lltok::kw_byval)) + if (parseRequiredTypeAttr(Ty, lltok::kw_byval)) return true; B.addByValAttr(Ty); continue; } case lltok::kw_sret: { Type *Ty; - if (parseOptionalTypeAttr(Ty, lltok::kw_sret)) + if (parseRequiredTypeAttr(Ty, lltok::kw_sret)) return true; B.addStructRetAttr(Ty); continue; @@ -2628,22 +2628,6 @@ return false; } -/// parseByValWithOptionalType -/// ::= byval -/// ::= byval() -bool LLParser::parseOptionalTypeAttr(Type *&Result, lltok::Kind AttrName) { - Result = nullptr; - if (!EatIfPresent(AttrName)) - return true; - if (!EatIfPresent(lltok::lparen)) - return false; - if (parseType(Result)) - return true; - if (!EatIfPresent(lltok::rparen)) - return error(Lex.getLoc(), "expected ')'"); - return false; -} - /// parseRequiredTypeAttr /// ::= attrname() bool LLParser::parseRequiredTypeAttr(Type *&Result, lltok::Kind AttrName) { Index: llvm/test/Assembler/byval-parse-error0.ll =================================================================== --- /dev/null +++ llvm/test/Assembler/byval-parse-error0.ll @@ -0,0 +1,6 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s + +; CHECK: :[[@LINE+1]]:34: error: expected '('{{$}} +define void @test_byval(i8* byval) { + ret void +} Index: llvm/test/Assembler/sret-parse-error0.ll =================================================================== --- /dev/null +++ llvm/test/Assembler/sret-parse-error0.ll @@ -0,0 +1,6 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s + +; CHECK: :[[@LINE+1]]:32: error: expected '('{{$}} +define void @test_sret(i8* sret) { + ret void +}