[llvm] r238895 - [BitcodeReader] Diagnose type mismatches with aliases
Chad Rosier
mcrosier at codeaurora.org
Fri Jun 5 12:07:37 PDT 2015
+1 for Duncan's suggestion.
-----Original Message-----
From: llvm-commits-bounces at cs.uiuc.edu
[mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Duncan P. N. Exon
Smith
Sent: Friday, June 05, 2015 1:38 PM
To: Filipe Cabecinhas
Cc: llvm-commits at cs.uiuc.edu
Subject: Re: [llvm] r238895 - [BitcodeReader] Diagnose type mismatches with
aliases
> On 2015-Jun-02, at 18:30, Filipe Cabecinhas <me at filcab.net> wrote:
>
> Author: filcab
> Date: Tue Jun 2 20:30:13 2015
> New Revision: 238895
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238895&view=rev
> Log:
> [BitcodeReader] Diagnose type mismatches with aliases
>
> Bug found with AFL fuzz.
>
> Added:
> llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
> Modified:
> llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
> llvm/trunk/test/Bitcode/invalid.test
>
> Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/Bitc
> odeReader.cpp?rev=238895&r1=238894&r2=238895&view=diff
> ======================================================================
> ========
> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Tue Jun 2
> +++ 20:30:13 2015
> @@ -2065,9 +2065,12 @@ std::error_code BitcodeReader::ResolveGl
> 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");
There's enough logic in there now, do you think it's worth flipping the if
for an else after the return?
Constant *C = ...;
if (!C)
return Error(...);
GlobalAlias *Alias = ...;
if (...)
return Error(...);
Alias->setAliasee(C);
(At least, I find that easier to follow.)
> }
> AliasInitWorklist.pop_back();
>
> Added: llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/Inputs/inv
> alid-alias-type-mismatch.bc?rev=238895&view=auto
> ======================================================================
> ======== Binary files
> llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc (added)
> and llvm/trunk/test/Bitcode/Inputs/invalid-alias-type-mismatch.bc Tue
> Jun 2 20:30:13 2015 differ
>
> Modified: llvm/trunk/test/Bitcode/invalid.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/invalid.te
> st?rev=238895&r1=238894&r2=238895&view=diff
> ======================================================================
> ========
> --- llvm/trunk/test/Bitcode/invalid.test (original)
> +++ llvm/trunk/test/Bitcode/invalid.test Tue Jun 2 20:30:13 2015
> @@ -197,3 +197,8 @@ RUN: not llvm-dis -disable-output %p/Inp
> RUN: FileCheck --check-prefix=VECTOR-LENGTH %s
>
> VECTOR-LENGTH: Invalid vector length
> +
> +RUN: not llvm-dis -disable-output
%p/Inputs/invalid-alias-type-mismatch.bc 2>&1 | \
> +RUN: FileCheck --check-prefix=ALIAS-TYPE-MISMATCH %s
> +
> +ALIAS-TYPE-MISMATCH: Alias and aliasee types don't match
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
_______________________________________________
llvm-commits mailing list
llvm-commits at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list