summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2015-03-02 06:00:02 +0000
committerOwen Anderson <resistor@mac.com>2015-03-02 06:00:02 +0000
commit5bc2bbe60191aa65faeb0a8f48e94750a826f42b (patch)
treec2441ea1fbfba2c476fd5e2410e9f42efcd72fb0
parent576a9a2728505d81849e3a15cdbc70d398fb95c6 (diff)
downloadbcm5719-llvm-5bc2bbe60191aa65faeb0a8f48e94750a826f42b.tar.gz
bcm5719-llvm-5bc2bbe60191aa65faeb0a8f48e94750a826f42b.zip
Teach DataLayout that zero-byte pointer sizes don't make sense.
Previously this would result in assertion failures or simply crashes at various points in the optimizer when trying to create types of zero bit width. llvm-svn: 230936
-rw-r--r--llvm/lib/IR/DataLayout.cpp2
-rw-r--r--llvm/test/Assembler/invalid-datalayout19.ll6
2 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp
index 9c1dee0cfb7..c414e80f410 100644
--- a/llvm/lib/IR/DataLayout.cpp
+++ b/llvm/lib/IR/DataLayout.cpp
@@ -259,6 +259,8 @@ void DataLayout::parseSpecifier(StringRef Desc) {
"Missing size specification for pointer in datalayout string");
Split = split(Rest, ':');
unsigned PointerMemSize = inBytes(getInt(Tok));
+ if (!PointerMemSize)
+ report_fatal_error("Invalid pointer size of 0 bytes");
// ABI alignment.
if (Rest.empty())
diff --git a/llvm/test/Assembler/invalid-datalayout19.ll b/llvm/test/Assembler/invalid-datalayout19.ll
new file mode 100644
index 00000000000..fc0fc468520
--- /dev/null
+++ b/llvm/test/Assembler/invalid-datalayout19.ll
@@ -0,0 +1,6 @@
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
+
+target datalayout = "p:0:32:32"
+
+; CHECK: Invalid pointer size of 0 bytes
+
OpenPOWER on IntegriCloud