diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-06-01 16:13:10 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-06-01 16:13:10 +0000 |
commit | c2cf6ef8e294ac96ea11f8625bf51da8339dd9a2 (patch) | |
tree | 48a6736164f596a7e0b7dcf84b5603bfbceb5a2b /llvm/lib/IR/Verifier.cpp | |
parent | 48622090c73d19a4c534a8667425fed839135a1c (diff) | |
download | llvm-c2cf6ef8e294ac96ea11f8625bf51da8339dd9a2.zip llvm-c2cf6ef8e294ac96ea11f8625bf51da8339dd9a2.tar.gz llvm-c2cf6ef8e294ac96ea11f8625bf51da8339dd9a2.tar.bz2 |
[IR] Disallow loading and storing unsized types
Summary:
It isn't clear what is the operational meaning of loading or storing an
unsized types, since it cannot be lowered into something meaningful.
Since there does not seem to be any practical need for it either, make
such loads and stores illegal IR.
Reviewers: majnemer, chandlerc
Subscribers: mcrosier, llvm-commits
Differential Revision: http://reviews.llvm.org/D20846
llvm-svn: 271402
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index fbf7350..f7807d1 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -2963,6 +2963,7 @@ void Verifier::visitLoadInst(LoadInst &LI) { Type *ElTy = LI.getType(); Assert(LI.getAlignment() <= Value::MaximumAlignment, "huge alignment values are unsupported", &LI); + Assert(ElTy->isSized(), "loading unsized types is not allowed", &LI); if (LI.isAtomic()) { Assert(LI.getOrdering() != AtomicOrdering::Release && LI.getOrdering() != AtomicOrdering::AcquireRelease, @@ -2991,6 +2992,7 @@ void Verifier::visitStoreInst(StoreInst &SI) { "Stored value type does not match pointer operand type!", &SI, ElTy); Assert(SI.getAlignment() <= Value::MaximumAlignment, "huge alignment values are unsupported", &SI); + Assert(ElTy->isSized(), "storing unsized types is not allowed", &SI); if (SI.isAtomic()) { Assert(SI.getOrdering() != AtomicOrdering::Acquire && SI.getOrdering() != AtomicOrdering::AcquireRelease, |