diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -1786,9 +1786,15 @@ AddrSpace = DefaultAS; if (!EatIfPresent(lltok::kw_addrspace)) return false; - return parseToken(lltok::lparen, "expected '(' in address space") || - parseUInt32(AddrSpace) || - parseToken(lltok::rparen, "expected ')' in address space"); + SMLoc loc = Lex.getLoc(); + bool HaveError = parseToken(lltok::lparen, "expected '(' in address space") || + parseUInt32(AddrSpace) || + parseToken(lltok::rparen, "expected ')' in address space"); + if (HaveError) + return true; + if (AddrSpace >= (1 << 24)) + return error(loc, "address space too large to fit in 24 bits"); + return false; } /// parseStringAttribute