[llvm] ee4d09b - [AsmParser] Report invalid data layout more gracefully

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 13 01:25:00 PDT 2022


Author: Nikita Popov
Date: 2022-07-13T10:24:47+02:00
New Revision: ee4d09b8bb735470cc7bbacfdfcd218220b1978a

URL: https://github.com/llvm/llvm-project/commit/ee4d09b8bb735470cc7bbacfdfcd218220b1978a
DIFF: https://github.com/llvm/llvm-project/commit/ee4d09b8bb735470cc7bbacfdfcd218220b1978a.diff

LOG: [AsmParser] Report invalid data layout more gracefully

Report this as a normal LLParser error, rather than a fatal error.

Added: 
    

Modified: 
    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

Removed: 
    


################################################################################
diff  --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index a878a5504629b..ff41ebc5b0c6f 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;
+    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;
   }
 }

diff  --git a/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll b/llvm/test/Assembler/datalayout-invalid-function-ptr-alignment.ll
index 4203c5546c206..7c1e070c292d1 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 8fc18d86b1fa3..1ccfb7832a50c 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 02f312b1bc6c2..8e2537ae6cf1d 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 16670259ccf42..f0407da73e4fc 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 2c01b6c0019e2..19bf77db329d2 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 fe0ab5c6087ba..e636b75dee4d0 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 5cf088b785b5e..d1befdcdf294d 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 80e5d4026d9b3..9f19688f852b4 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 0fa99c5f7c292..f8fed8ff9ff33 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 9a7535f7b6cac..d79c196baab16 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 26dbf44f1928e..5ac719dbb7a9c 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 3ca2da41743d8..84634b52a146c 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 8fdfcbf1ee83b..ea240b73fd25f 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 23f3e17e6d15e..0dd1abb629b6f 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 75c9b005c30d6..519f5c10ab3c2 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 dc6e722445f4b..b9956f98c9c6d 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 dc3fa2bde1b0e..fc0fc46852092 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 1f7db4e605af0..a435612bf8545 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 811488e945c8d..a9ac1d7fe0983 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 0db99d254b130..a39d1d7a14a86 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 3db71d7d1b2db..14e4c2822ce4b 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 308b0140cd982..430326327bc11 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 0c38103c9057e..616ec64518a5b 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 613d619c5a056..44535fd055b5e 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 5b174ff061848..2d946d32609d0 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 6ca188a4fd57d..3ce8791c0870b 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 f8ea6392a3598..425099f7cad86 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 bae2b28b9c4e5..5e010710889f6 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 2f7f18c7af5b8..28832ffb17dd0 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 74b9dbacbf067..dfeac65cf604d 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


        


More information about the llvm-commits mailing list