diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index a878a5504629..ff41ebc5b0c6 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -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 MaybeDL = DataLayout::parse(Str); + if (!MaybeDL) + return error(Loc, toString(std::move(MaybeDL.takeError()))); + M->setDataLayout(MaybeDL.get()); return false; } } diff --git a/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll b/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll index 4203c5546c20..7c1e070c292d 100644 --- a/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll +++ b/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll @@ -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" diff --git a/llvm/test/Assembler/datalayout-invalid-stack-natural-alignment.ll b/llvm/test/Assembler/datalayout-invalid-stack-natural-alignment.ll index 8fc18d86b1fa..1ccfb7832a50 100644 --- a/llvm/test/Assembler/datalayout-invalid-stack-natural-alignment.ll +++ b/llvm/test/Assembler/datalayout-invalid-stack-natural-alignment.ll @@ -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" diff --git a/llvm/test/Assembler/getInt.ll b/llvm/test/Assembler/getInt.ll index 02f312b1bc6c..8e2537ae6cf1 100644 --- a/llvm/test/Assembler/getInt.ll +++ b/llvm/test/Assembler/getInt.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout-alloca-addrspace.ll b/llvm/test/Assembler/invalid-datalayout-alloca-addrspace.ll index 16670259ccf4..f0407da73e4f 100644 --- a/llvm/test/Assembler/invalid-datalayout-alloca-addrspace.ll +++ b/llvm/test/Assembler/invalid-datalayout-alloca-addrspace.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout-globals-addrspace.ll b/llvm/test/Assembler/invalid-datalayout-globals-addrspace.ll index 2c01b6c0019e..19bf77db329d 100644 --- a/llvm/test/Assembler/invalid-datalayout-globals-addrspace.ll +++ b/llvm/test/Assembler/invalid-datalayout-globals-addrspace.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout-program-addrspace.ll b/llvm/test/Assembler/invalid-datalayout-program-addrspace.ll index fe0ab5c6087b..e636b75dee4d 100644 --- a/llvm/test/Assembler/invalid-datalayout-program-addrspace.ll +++ b/llvm/test/Assembler/invalid-datalayout-program-addrspace.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout1.ll b/llvm/test/Assembler/invalid-datalayout1.ll index 5cf088b785b5..d1befdcdf294 100644 --- a/llvm/test/Assembler/invalid-datalayout1.ll +++ b/llvm/test/Assembler/invalid-datalayout1.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout10.ll b/llvm/test/Assembler/invalid-datalayout10.ll index 80e5d4026d9b..9f19688f852b 100644 --- a/llvm/test/Assembler/invalid-datalayout10.ll +++ b/llvm/test/Assembler/invalid-datalayout10.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout11.ll b/llvm/test/Assembler/invalid-datalayout11.ll index 0fa99c5f7c29..f8fed8ff9ff3 100644 --- a/llvm/test/Assembler/invalid-datalayout11.ll +++ b/llvm/test/Assembler/invalid-datalayout11.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout12.ll b/llvm/test/Assembler/invalid-datalayout12.ll index 9a7535f7b6ca..d79c196baab1 100644 --- a/llvm/test/Assembler/invalid-datalayout12.ll +++ b/llvm/test/Assembler/invalid-datalayout12.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout13.ll b/llvm/test/Assembler/invalid-datalayout13.ll index 26dbf44f1928..5ac719dbb7a9 100644 --- a/llvm/test/Assembler/invalid-datalayout13.ll +++ b/llvm/test/Assembler/invalid-datalayout13.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout14.ll b/llvm/test/Assembler/invalid-datalayout14.ll index 3ca2da41743d..84634b52a146 100644 --- a/llvm/test/Assembler/invalid-datalayout14.ll +++ b/llvm/test/Assembler/invalid-datalayout14.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout15.ll b/llvm/test/Assembler/invalid-datalayout15.ll index 8fdfcbf1ee83..ea240b73fd25 100644 --- a/llvm/test/Assembler/invalid-datalayout15.ll +++ b/llvm/test/Assembler/invalid-datalayout15.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout16.ll b/llvm/test/Assembler/invalid-datalayout16.ll index 23f3e17e6d15..0dd1abb629b6 100644 --- a/llvm/test/Assembler/invalid-datalayout16.ll +++ b/llvm/test/Assembler/invalid-datalayout16.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout17.ll b/llvm/test/Assembler/invalid-datalayout17.ll index 75c9b005c30d..519f5c10ab3c 100644 --- a/llvm/test/Assembler/invalid-datalayout17.ll +++ b/llvm/test/Assembler/invalid-datalayout17.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout18.ll b/llvm/test/Assembler/invalid-datalayout18.ll index dc6e722445f4..b9956f98c9c6 100644 --- a/llvm/test/Assembler/invalid-datalayout18.ll +++ b/llvm/test/Assembler/invalid-datalayout18.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout19.ll b/llvm/test/Assembler/invalid-datalayout19.ll index dc3fa2bde1b0..fc0fc4685209 100644 --- a/llvm/test/Assembler/invalid-datalayout19.ll +++ b/llvm/test/Assembler/invalid-datalayout19.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout2.ll b/llvm/test/Assembler/invalid-datalayout2.ll index 1f7db4e605af..a435612bf854 100644 --- a/llvm/test/Assembler/invalid-datalayout2.ll +++ b/llvm/test/Assembler/invalid-datalayout2.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout20.ll b/llvm/test/Assembler/invalid-datalayout20.ll index 811488e945c8..a9ac1d7fe098 100644 --- a/llvm/test/Assembler/invalid-datalayout20.ll +++ b/llvm/test/Assembler/invalid-datalayout20.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout21.ll b/llvm/test/Assembler/invalid-datalayout21.ll index 0db99d254b13..a39d1d7a14a8 100644 --- a/llvm/test/Assembler/invalid-datalayout21.ll +++ b/llvm/test/Assembler/invalid-datalayout21.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout22.ll b/llvm/test/Assembler/invalid-datalayout22.ll index 3db71d7d1b2d..14e4c2822ce4 100644 --- a/llvm/test/Assembler/invalid-datalayout22.ll +++ b/llvm/test/Assembler/invalid-datalayout22.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout23.ll b/llvm/test/Assembler/invalid-datalayout23.ll index 308b0140cd98..430326327bc1 100644 --- a/llvm/test/Assembler/invalid-datalayout23.ll +++ b/llvm/test/Assembler/invalid-datalayout23.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout24.ll b/llvm/test/Assembler/invalid-datalayout24.ll index 0c38103c9057..616ec64518a5 100644 --- a/llvm/test/Assembler/invalid-datalayout24.ll +++ b/llvm/test/Assembler/invalid-datalayout24.ll @@ -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" diff --git a/llvm/test/Assembler/invalid-datalayout3.ll b/llvm/test/Assembler/invalid-datalayout3.ll index 613d619c5a05..44535fd055b5 100644 --- a/llvm/test/Assembler/invalid-datalayout3.ll +++ b/llvm/test/Assembler/invalid-datalayout3.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout4.ll b/llvm/test/Assembler/invalid-datalayout4.ll index 5b174ff06184..2d946d32609d 100644 --- a/llvm/test/Assembler/invalid-datalayout4.ll +++ b/llvm/test/Assembler/invalid-datalayout4.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout5.ll b/llvm/test/Assembler/invalid-datalayout5.ll index 6ca188a4fd57..3ce8791c0870 100644 --- a/llvm/test/Assembler/invalid-datalayout5.ll +++ b/llvm/test/Assembler/invalid-datalayout5.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout6.ll b/llvm/test/Assembler/invalid-datalayout6.ll index f8ea6392a359..425099f7cad8 100644 --- a/llvm/test/Assembler/invalid-datalayout6.ll +++ b/llvm/test/Assembler/invalid-datalayout6.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout7.ll b/llvm/test/Assembler/invalid-datalayout7.ll index bae2b28b9c4e..5e010710889f 100644 --- a/llvm/test/Assembler/invalid-datalayout7.ll +++ b/llvm/test/Assembler/invalid-datalayout7.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout8.ll b/llvm/test/Assembler/invalid-datalayout8.ll index 2f7f18c7af5b..28832ffb17dd 100644 --- a/llvm/test/Assembler/invalid-datalayout8.ll +++ b/llvm/test/Assembler/invalid-datalayout8.ll @@ -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 diff --git a/llvm/test/Assembler/invalid-datalayout9.ll b/llvm/test/Assembler/invalid-datalayout9.ll index 74b9dbacbf06..dfeac65cf604 100644 --- a/llvm/test/Assembler/invalid-datalayout9.ll +++ b/llvm/test/Assembler/invalid-datalayout9.ll @@ -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