diff options
author | Filipe Cabecinhas <me@filcab.net> | 2015-06-03 01:30:13 +0000 |
---|---|---|
committer | Filipe Cabecinhas <me@filcab.net> | 2015-06-03 01:30:13 +0000 |
commit | da86b6d409edd7af98a42dad65f33e5e49e43115 (patch) | |
tree | 5634eef65522be54ed00283eafa63b43c01a7a15 /llvm/lib/Bitcode | |
parent | 7b3995885d4ac1dfc1a3c67fc651ad00a1611f19 (diff) | |
download | bcm5719-llvm-da86b6d409edd7af98a42dad65f33e5e49e43115.tar.gz bcm5719-llvm-da86b6d409edd7af98a42dad65f33e5e49e43115.zip |
[BitcodeReader] Diagnose type mismatches with aliases
Bug found with AFL fuzz.
llvm-svn: 238895
Diffstat (limited to 'llvm/lib/Bitcode')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 9e5e46aae0b..75b3b9fd73c 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2065,9 +2065,12 @@ std::error_code BitcodeReader::ResolveGlobalAndAliasInits() { if (ValID >= ValueList.size()) { AliasInits.push_back(AliasInitWorklist.back()); } else { - if (Constant *C = dyn_cast_or_null<Constant>(ValueList[ValID])) - AliasInitWorklist.back().first->setAliasee(C); - else + if (Constant *C = dyn_cast_or_null<Constant>(ValueList[ValID])) { + GlobalAlias *Alias = AliasInitWorklist.back().first; + if (C->getType() != Alias->getType()) + return Error("Alias and aliasee types don't match"); + Alias->setAliasee(C); + } else return Error("Expected a constant"); } AliasInitWorklist.pop_back(); |