Ah, thanks for the explanation. I wonder if this means we should be checking 
expression types earlier, but meanwhile we might as well be safe. Committed as 
r216076!

Jordan


On Aug 19, 2014, at 6:55 , Anders Rönnholm <[email protected]> wrote:

> The ast-dump looks like below. The bug occurs when an assert in the 
> comparison operator of APInt is triggered between `-IntegerLiteral 0x56924a8 
> <col:9> 'int' 0 and `-IntegerLiteral 0x56bfba0 <col:9> 'unsigned long' 
> 18446744073709551615  
> 
> APInt.h:969: bool llvm::APInt::operator==(const llvm::APInt&) const: 
> Assertion `BitWidth == RHS.BitWidth && "Comparison requires equal bit 
> widths"' failed.
> 
> I don't know of a better fix than to check that the bitwidths are equal.
> 
>    | | `-BinaryOperator 0x56924e0 <line:7:5, col:9> 'long' '='
>    | |   |-DeclRefExpr 0x5692480 <col:5> 'long' lvalue Var 0x5692220 'c' 
> 'long'
>    | |   `-ImplicitCastExpr 0x56924c8 <col:9> 'long' <IntegralCast>
>    | |     `-IntegerLiteral 0x56924a8 <col:9> 'int' 0
>    | `-CompoundStmt 0x56bfc00 <line:8:10, line:11:3>
>    |   |-CompoundAssignOperator 0x56bfb40 <line:9:5, col:10> 'int' '-=' 
> ComputeLHSTy='int' ComputeResultTy='int'
>    |   | |-DeclRefExpr 0x5692530 <col:5> 'int' lvalue Var 0x56921a0 'b' 'int'
>    |   | `-ImplicitCastExpr 0x56bfb28 <col:10> 'int' <LValueToRValue>
>    |   |   `-DeclRefExpr 0x56bfb00 <col:10> 'int' lvalue Var 0x5692130 'a' 
> 'int'
>    |   `-BinaryOperator 0x56bfbd8 <line:10:5, col:9> 'long' '='
>    |     |-DeclRefExpr 0x56bfb78 <col:5> 'long' lvalue Var 0x5692220 'c' 
> 'long'
>    |     `-ImplicitCastExpr 0x56bfbc0 <col:9> 'long' <IntegralCast>
>    |       `-IntegerLiteral 0x56bfba0 <col:9> 'unsigned long' 
> 18446744073709551615
> 
> //Anders
> 
> ________________________________________
> Från: Jordan Rose [[email protected]]
> Skickat: den 18 augusti 2014 18:36
> Till: Anders Rönnholm
> Cc: [email protected]
> Ämne: Re: [PATCH] fix bug 20659 ICE in alpha.core.IdenticalExpr
> 
> Thanks for getting to this so quickly. However, I kind of thought C doesn't 
> ever allow this—any comparisons between two values should always have already 
> implicitly converted one type to the other. Is this because we're looking 
> through casts?
> 
> If you're sure this is the right fix (and not, say, somewhere else in the 
> analyzer), please add a reduced test case as well.
> 
> Jordan
> 
> 
> On Aug 18, 2014, at 1:18 , Anders Rönnholm <[email protected]> 
> wrote:
> 
>> Hi,
>> 
>> Fix for reported bug 20659 in identicalexpression.
>> 
>> //Anders
>> <bug-20659.diff>_______________________________________________
>> cfe-commits mailing list
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> <bug-20659.diff>


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to