Skip to content
Snippets Groups Projects
  • Jordan Rose's avatar
    5e6c06bc
    [analyzer] Model casts to bool differently from other numbers. · 5e6c06bc
    Jordan Rose authored
    Casts to bool (and _Bool) are equivalent to checks against zero,
    not truncations to 1 bit or 8 bits.
    
    This improved reasoning does cause a change in the behavior of the alpha
    BoolAssignment checker. Previously, this checker complained about statements
    like "bool x = y" if 'y' was known not to be 0 or 1. Now it does not, since
    that conversion is well-defined. It's hard to say what the "best" behavior
    here is: this conversion is safe, but might be better written as an explicit
    comparison against zero.
    
    More usefully, besides improving our model of booleans, this fixes spurious
    warnings when returning the address of a local variable cast to bool.
    
    <rdar://problem/13296133>
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180638 91177308-0d34-0410-b5e6-96231b3b80d8
    5e6c06bc
    History
    [analyzer] Model casts to bool differently from other numbers.
    Jordan Rose authored
    Casts to bool (and _Bool) are equivalent to checks against zero,
    not truncations to 1 bit or 8 bits.
    
    This improved reasoning does cause a change in the behavior of the alpha
    BoolAssignment checker. Previously, this checker complained about statements
    like "bool x = y" if 'y' was known not to be 0 or 1. Now it does not, since
    that conversion is well-defined. It's hard to say what the "best" behavior
    here is: this conversion is safe, but might be better written as an explicit
    comparison against zero.
    
    More usefully, besides improving our model of booleans, this fixes spurious
    warnings when returning the address of a local variable cast to bool.
    
    <rdar://problem/13296133>
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180638 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.