Report this as a normal LLParser error, rather than a fatal error.
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;
+ LocTy Loc = Lex.getLoc();
+ if (parseStringConstant(Str))
return true;
- M->setDataLayout(Str);
+ Expected<DataLayout> MaybeDL = DataLayout::parse(Str);
+ if (!MaybeDL)
+ return error(Loc, toString(std::move(MaybeDL.takeError())));
+ M->setDataLayout(MaybeDL.get());
return false;
}
}
-; 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"
-; 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"
-; 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"
-; 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
-; 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"
-; 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"
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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"
-; 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
-; 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"
-; 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"
-; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "v128:0:128"
-; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i32:24:32"
-; RUN: not --crash llvm-as < %s 2>&1 | FileCheck %s
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
target datalayout = "i32:32:24"
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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
-; 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