From 5330c69bd15179904dfae54fff511033305679e1 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Wed, 10 Dec 2014 01:17:08 +0000 Subject: [PATCH] DataLayout: Move asserts over to report_fatal_error As indicated by the tests, it is possible to feed the AsmParser an invalid datalayout string. We should verify the result of parsing this string regardless of whether or not we have assertions enabled. llvm-svn: 223898 --- llvm/lib/IR/DataLayout.cpp | 17 ++++++++++------- llvm/test/Assembler/invalid-datalayout1.ll | 3 +++ llvm/test/Assembler/invalid-datalayout2.ll | 3 +++ llvm/test/Assembler/invalid-datalayout3.ll | 3 +++ llvm/test/Assembler/invalid-datalayout4.ll | 3 +++ llvm/test/Assembler/invalid-datalayout5.bc | Bin 0 -> 364 bytes llvm/test/Assembler/invalid-datalayout5.ll | 3 +++ 7 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 llvm/test/Assembler/invalid-datalayout1.ll create mode 100644 llvm/test/Assembler/invalid-datalayout2.ll create mode 100644 llvm/test/Assembler/invalid-datalayout3.ll create mode 100644 llvm/test/Assembler/invalid-datalayout4.ll create mode 100644 llvm/test/Assembler/invalid-datalayout5.bc create mode 100644 llvm/test/Assembler/invalid-datalayout5.ll diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp index 8a057f5..394986e 100644 --- a/llvm/lib/IR/DataLayout.cpp +++ b/llvm/lib/IR/DataLayout.cpp @@ -247,8 +247,8 @@ void DataLayout::parseSpecifier(StringRef Desc) { case 'p': { // Address space. unsigned AddrSpace = Tok.empty() ? 0 : getInt(Tok); - assert(AddrSpace < 1 << 24 && - "Invalid address space, must be a 24bit integer"); + if (!isUInt<24>(AddrSpace)) + report_fatal_error("Invalid address space, must be a 24bit integer"); // Size. Split = split(Rest, ':'); @@ -285,8 +285,9 @@ void DataLayout::parseSpecifier(StringRef Desc) { // Bit size. unsigned Size = Tok.empty() ? 0 : getInt(Tok); - assert((AlignType != AGGREGATE_ALIGN || Size == 0) && - "These specifications don't have a size"); + if (AlignType == AGGREGATE_ALIGN && Size != 0) + report_fatal_error( + "Sized aggregate specification in datalayout string"); // ABI alignment. Split = split(Rest, ':'); @@ -306,7 +307,9 @@ void DataLayout::parseSpecifier(StringRef Desc) { case 'n': // Native integer types. for (;;) { unsigned Width = getInt(Tok); - assert(Width != 0 && "width must be non-zero"); + if (Width == 0) + report_fatal_error( + "Zero width native integer type in datalayout string"); LegalIntWidths.push_back(Width); if (Rest.empty()) break; @@ -322,7 +325,7 @@ void DataLayout::parseSpecifier(StringRef Desc) { assert(Rest.size() == 1); switch(Rest[0]) { default: - llvm_unreachable("Unknown mangling in datalayout string"); + report_fatal_error("Unknown mangling in datalayout string"); case 'e': ManglingMode = MM_ELF; break; @@ -338,7 +341,7 @@ void DataLayout::parseSpecifier(StringRef Desc) { } break; default: - llvm_unreachable("Unknown specifier in datalayout string"); + report_fatal_error("Unknown specifier in datalayout string"); break; } } diff --git a/llvm/test/Assembler/invalid-datalayout1.ll b/llvm/test/Assembler/invalid-datalayout1.ll new file mode 100644 index 0000000..d1befdc --- /dev/null +++ b/llvm/test/Assembler/invalid-datalayout1.ll @@ -0,0 +1,3 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s +target datalayout = "^" +; CHECK: Unknown specifier in datalayout string diff --git a/llvm/test/Assembler/invalid-datalayout2.ll b/llvm/test/Assembler/invalid-datalayout2.ll new file mode 100644 index 0000000..a435612 --- /dev/null +++ b/llvm/test/Assembler/invalid-datalayout2.ll @@ -0,0 +1,3 @@ +; 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-datalayout3.ll b/llvm/test/Assembler/invalid-datalayout3.ll new file mode 100644 index 0000000..44535fd --- /dev/null +++ b/llvm/test/Assembler/invalid-datalayout3.ll @@ -0,0 +1,3 @@ +; 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 new file mode 100644 index 0000000..2d946d3 --- /dev/null +++ b/llvm/test/Assembler/invalid-datalayout4.ll @@ -0,0 +1,3 @@ +; 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.bc b/llvm/test/Assembler/invalid-datalayout5.bc new file mode 100644 index 0000000000000000000000000000000000000000..736b21fac6596a0dbd40f4fc887ad5a41743a7be GIT binary patch literal 364 zcmZ>AK5$Qwhk+r2fq{X$Nr8b0NDBcmd!zD1#}h1`Yyw7>lNeigR9QJB%Qse!$+g1vY~A{SKKWfkoO3hk0-1o_@f;CpDmpJ%}T_ygaE z06t@ZBeM4tWo{_S9!iu;Gw8J5(`VfB&7NkP7G~=+A4JL$*sC+x%`@7IfMi2^ x!G!jL1okow_Oc(WKx4}r+T%Ie3nki%X0%t%Xw-T4f$!Y|zOM)P-hjNv0048(axMS> literal 0 HcmV?d00001 diff --git a/llvm/test/Assembler/invalid-datalayout5.ll b/llvm/test/Assembler/invalid-datalayout5.ll new file mode 100644 index 0000000..3ce8791 --- /dev/null +++ b/llvm/test/Assembler/invalid-datalayout5.ll @@ -0,0 +1,3 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s +target datalayout = "a1:64" +; CHECK: Sized aggregate specification in datalayout string -- 2.7.4