diff options
author | Owen Anderson <resistor@mac.com> | 2015-03-02 06:00:02 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2015-03-02 06:00:02 +0000 |
commit | 5bc2bbe60191aa65faeb0a8f48e94750a826f42b (patch) | |
tree | c2441ea1fbfba2c476fd5e2410e9f42efcd72fb0 | |
parent | 576a9a2728505d81849e3a15cdbc70d398fb95c6 (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | llvm/test/Assembler/invalid-datalayout19.ll | 6 |
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 + |