[AsmParser] Report invalid data layout more gracefully
authorNikita Popov <npopov@redhat.com>
Wed, 13 Jul 2022 08:15:51 +0000 (10:15 +0200)
committerNikita Popov <npopov@redhat.com>
Wed, 13 Jul 2022 08:24:47 +0000 (10:24 +0200)
Report this as a normal LLParser error, rather than a fatal error.

31 files changed:
llvm/lib/AsmParser/LLParser.cpp
llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll
llvm/test/Assembler/datalayout-invalid-stack-natural-alignment.ll
llvm/test/Assembler/getInt.ll
llvm/test/Assembler/invalid-datalayout-alloca-addrspace.ll
llvm/test/Assembler/invalid-datalayout-globals-addrspace.ll
llvm/test/Assembler/invalid-datalayout-program-addrspace.ll
llvm/test/Assembler/invalid-datalayout1.ll
llvm/test/Assembler/invalid-datalayout10.ll
llvm/test/Assembler/invalid-datalayout11.ll
llvm/test/Assembler/invalid-datalayout12.ll
llvm/test/Assembler/invalid-datalayout13.ll
llvm/test/Assembler/invalid-datalayout14.ll
llvm/test/Assembler/invalid-datalayout15.ll
llvm/test/Assembler/invalid-datalayout16.ll
llvm/test/Assembler/invalid-datalayout17.ll
llvm/test/Assembler/invalid-datalayout18.ll
llvm/test/Assembler/invalid-datalayout19.ll
llvm/test/Assembler/invalid-datalayout2.ll
llvm/test/Assembler/invalid-datalayout20.ll
llvm/test/Assembler/invalid-datalayout21.ll
llvm/test/Assembler/invalid-datalayout22.ll
llvm/test/Assembler/invalid-datalayout23.ll
llvm/test/Assembler/invalid-datalayout24.ll
llvm/test/Assembler/invalid-datalayout3.ll
llvm/test/Assembler/invalid-datalayout4.ll
llvm/test/Assembler/invalid-datalayout5.ll
llvm/test/Assembler/invalid-datalayout6.ll
llvm/test/Assembler/invalid-datalayout7.ll
llvm/test/Assembler/invalid-datalayout8.ll
llvm/test/Assembler/invalid-datalayout9.ll

index a878a55..ff41ebc 100644 (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;
+    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;
   }
 }
index 4203c55..7c1e070 100644 (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"
index 8fc18d8..1ccfb78 100644 (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"
index 02f312b..8e2537a 100644 (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"
index 1667025..f0407da 100644 (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
index 2c01b6c..19bf77d 100644 (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"
index fe0ab5c..e636b75 100644 (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"
index 5cf088b..d1befdc 100644 (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
index 80e5d40..9f19688 100644 (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
index 0fa99c5..f8fed8f 100644 (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
index 9a7535f..d79c196 100644 (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
index 26dbf44..5ac719d 100644 (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
index 3ca2da4..84634b5 100644 (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
index 8fdfcbf..ea240b7 100644 (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
index 23f3e17..0dd1abb 100644 (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
index 75c9b00..519f5c1 100644 (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
index dc6e722..b9956f9 100644 (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
index dc3fa2b..fc0fc46 100644 (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"
 
index 1f7db4e..a435612 100644 (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
index 811488e..a9ac1d7 100644 (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"
 
index 0db99d2..a39d1d7 100644 (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"
 
index 3db71d7..14e4c28 100644 (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"
 
index 308b014..4303263 100644 (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"
 
index 0c38103..616ec64 100644 (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"
 
index 613d619..44535fd 100644 (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
index 5b174ff..2d946d3 100644 (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
index 6ca188a..3ce8791 100644 (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
index f8ea639..425099f 100644 (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
index bae2b28..5e01071 100644 (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
index 2f7f18c..28832ff 100644 (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
index 74b9dba..dfeac65 100644 (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