class AdLint::Exam::CBuiltin::W1071

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 21644
def initialize(phase_ctxt)
  super
  interp = phase_ctxt[:cc1_interpreter]
  interp.on_function_started       += T(:enter_function)
  interp.on_function_ended         += T(:leave_function)
  interp.on_implicit_return_evaled += M(:memorize_implicit_termination)
  interp.on_return_stmt_evaled     += T(:memorize_termination)
  @cur_fun = nil
  @term_points = 0
end

Private Instance Methods

enter_function(fun_def, *) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21656
def enter_function(fun_def, *)
  @cur_fun = fun_def
  @term_points = 0
end
leave_function(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21661
def leave_function(*)
  if @cur_fun && @term_points > 1
    W(@cur_fun.location, @cur_fun.identifier.value)
  end
  @cur_fun = nil
end
memorize_implicit_termination(loc) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21668
def memorize_implicit_termination(loc)
  if loc.in_analysis_target?(traits)
    memorize_termination
  end
end
memorize_termination(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 21674
def memorize_termination(*)
  @term_points += 1 if @cur_fun
end