[AsmParser] Report invalid data layout more gracefully

Report this as a normal LLParser error, rather than a fatal error.
This commit is contained in:
Nikita Popov 2022-07-13 10:15:51 +02:00
parent d4892a168f
commit ee4d09b8bb
31 changed files with 40 additions and 35 deletions

View File

@ -456,10 +456,15 @@ bool LLParser::parseTargetDefinition() {
return false;
case lltok::kw_datalayout:
Lex.Lex();
if (parseToken(lltok::equal, "expected '=' after target datalayout") ||
parseStringConstant(Str))
if (parseToken(lltok::equal, "expected '=' after target datalayout"))
return true;
M->setDataLayout(Str);
LocTy Loc = Lex.getLoc();
if (parseStringConstant(Str))
return true;
Expected<DataLayout> MaybeDL = DataLayout::parse(Str);
if (!MaybeDL)
return error(Loc, toString(std::move(MaybeDL.takeError())));
M->setDataLayout(MaybeDL.get());
return false;
}
}

View File

@ -1,5 +1,5 @@
; RUN: not --crash llvm-as %s 2>&1 | FileCheck %s
; RUN: not llvm-as %s 2>&1 | FileCheck %s
; CHECK: LLVM ERROR: Alignment is neither 0 nor a power of 2
; CHECK: error: Alignment is neither 0 nor a power of 2
target datalayout = "Fi24"

View File

@ -1,5 +1,5 @@
; RUN: not --crash llvm-as %s 2>&1 | FileCheck %s
; RUN: not llvm-as %s 2>&1 | FileCheck %s
; CHECK: LLVM ERROR: Alignment is neither 0 nor a power of 2
; CHECK: error: Alignment is neither 0 nor a power of 2
target datalayout = "S24"

View File

@ -1,3 +1,3 @@
; RUN: not --crash opt < %s 2>&1 | grep 'not a number, or does not fit in an unsigned int'
; RUN: not opt < %s 2>&1 | grep 'not a number, or does not fit in an unsigned int'
target datalayout = "p:4294967296:64:64"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "A16777216"
; CHECK: Invalid address space, must be a 24-bit integer

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
; CHECK: Invalid address space, must be a 24-bit integer
target datalayout = "G16777216"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
; CHECK: Invalid address space, must be a 24-bit integer
target datalayout = "P16777216"

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "^"
; CHECK: Unknown specifier in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "m"
; CHECK: Expected mangling specifier in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "m."
; CHECK: Unexpected trailing characters after mangling specifier in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "f"
; CHECK: Missing alignment specification in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = ":32"
; CHECK: Expected token before separator in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i64:64:16"
; CHECK: Preferred alignment cannot be less than the ABI alignment

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i64:16:16777216"
; CHECK: Invalid preferred alignment, must be a 16bit integer

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i64:16777216:16777216"
; CHECK: Invalid ABI alignment, must be a 16bit integer

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i16777216:16:16"
; CHECK: Invalid bit width, must be a 24bit integer

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p:32:32:16"
; CHECK: Preferred alignment cannot be less than the ABI alignment

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p:0:32:32"

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "m:v"
; CHECK: Unknown mangling in datalayout string

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p:64:24:64"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p:64:64:24"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "v128:0:128"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i32:24:32"

View File

@ -1,4 +1,4 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i32:32:24"

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "n0"
; CHECK: Zero width native integer type in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p16777216:64:64:64"
; CHECK: Invalid address space, must be a 24bit integer

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "a1:64"
; CHECK: Sized aggregate specification in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "a:"
; CHECK: Trailing separator in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "p:48:52"
; CHECK: number of bits must be a byte width multiple

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "e-p"
; CHECK: Missing size specification for pointer in datalayout string

View File

@ -1,3 +1,3 @@
; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "e-p:64"
; CHECK: Missing alignment specification for pointer in datalayout string