mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
Make CallingConv::ID an alias of "unsigned".
Summary: Make CallingConv::ID a plain unsigned instead of enum with a fixed set of valus. LLVM IR allows arbitraty calling conventions (you are free to write cc12345), and loading them as enum is an undefined behavior. This was reported by UBSan. Test Plan: llvm regression test suite Reviewers: nicholas Reviewed By: nicholas Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5248 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217529 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1464,7 +1464,7 @@ bool LLParser::ParseOptionalDLLStorageClass(unsigned &Res) {
|
||||
/// ::= 'preserve_allcc'
|
||||
/// ::= 'cc' UINT
|
||||
///
|
||||
bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
|
||||
bool LLParser::ParseOptionalCallingConv(unsigned &CC) {
|
||||
switch (Lex.getKind()) {
|
||||
default: CC = CallingConv::C; return false;
|
||||
case lltok::kw_ccc: CC = CallingConv::C; break;
|
||||
@ -1489,12 +1489,8 @@ bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
|
||||
case lltok::kw_preserve_mostcc:CC = CallingConv::PreserveMost; break;
|
||||
case lltok::kw_preserve_allcc: CC = CallingConv::PreserveAll; break;
|
||||
case lltok::kw_cc: {
|
||||
unsigned ArbitraryCC;
|
||||
Lex.Lex();
|
||||
if (ParseUInt32(ArbitraryCC))
|
||||
return true;
|
||||
CC = static_cast<CallingConv::ID>(ArbitraryCC);
|
||||
return false;
|
||||
return ParseUInt32(CC);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3131,7 +3127,7 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
|
||||
unsigned Visibility;
|
||||
unsigned DLLStorageClass;
|
||||
AttrBuilder RetAttrs;
|
||||
CallingConv::ID CC;
|
||||
unsigned CC;
|
||||
Type *RetType = nullptr;
|
||||
LocTy RetTypeLoc = Lex.getLoc();
|
||||
if (ParseOptionalLinkage(Linkage) ||
|
||||
@ -3803,7 +3799,7 @@ bool LLParser::ParseInvoke(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
AttrBuilder RetAttrs, FnAttrs;
|
||||
std::vector<unsigned> FwdRefAttrGrps;
|
||||
LocTy NoBuiltinLoc;
|
||||
CallingConv::ID CC;
|
||||
unsigned CC;
|
||||
Type *RetType = nullptr;
|
||||
LocTy RetTypeLoc;
|
||||
ValID CalleeID;
|
||||
@ -4217,7 +4213,7 @@ bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
|
||||
AttrBuilder RetAttrs, FnAttrs;
|
||||
std::vector<unsigned> FwdRefAttrGrps;
|
||||
LocTy BuiltinLoc;
|
||||
CallingConv::ID CC;
|
||||
unsigned CC;
|
||||
Type *RetType = nullptr;
|
||||
LocTy RetTypeLoc;
|
||||
ValID CalleeID;
|
||||
|
Reference in New Issue
Block a user