class AdLint::Exam::CBuiltin::W0023

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 431
def initialize(phase_ctxt)
  super
  @interp = phase_ctxt[:cc1_interpreter]
  @interp.on_additive_expr_evaled       += T(:check_binary)
  @interp.on_multiplicative_expr_evaled += T(:check_binary)
end

Private Instance Methods

check_binary(binary_expr, lhs_var, rhs_var, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 439
def check_binary(binary_expr, lhs_var, rhs_var, *)
  case
  when lhs_var.type.pointer? && rhs_var.type.scalar?
    rhs_val = rhs_var.value
    if rhs_var.value.scalar? &&
        rhs_val.test_must_be_equal_to(scalar_value_of(1)).false?
      W(binary_expr.location)
    end
  when rhs_var.type.pointer? && lhs_var.type.scalar?
    lhs_val = lhs_var.value
    if lhs_val.scalar? &&
        lhs_val.test_must_be_equal_to(scalar_value_of(1)).false?
      W(binary_expr.location)
    end
  end
end
interpreter() click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 456
def interpreter
  @interp
end