class AdLint::Exam::CBuiltin::W0105
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 2504 def initialize(phase_ctxt) super interp = phase_ctxt[:cc1_interpreter] interp.on_function_started += T(:start_function) interp.on_function_ended += T(:check_constant_parameters) interp.on_parameter_defined += T(:add_parameter) interp.on_variable_value_updated += T(:write_parameter) interp.on_indirection_expr_evaled += T(:handle_indirection) interp.on_array_subscript_expr_evaled += T(:handle_array_subscript) @var_relationship = nil @params = nil end
Private Instance Methods
add_parameter(param_def, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2523 def add_parameter(param_def, var) if @params && var.type.pointer? && var.named? @params[var] = [param_def.location, false] end end
check_constant_parameters(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2551 def check_constant_parameters(*) return unless @params @params.each do |ptr, (loc, written)| base_type = ptr.type.unqualify.base_type unless base_type.function? unless written || base_type.const? W(loc, ptr.name) end end end @var_relationship = nil @params = nil end
handle_array_subscript(expr, ary_or_ptr, *, rslt_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2545 def handle_array_subscript(expr, ary_or_ptr, *, rslt_var) if @var_relationship && ary_or_ptr.type.pointer? @var_relationship[rslt_var] = ary_or_ptr end end
handle_indirection(*, var, derefed_var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2539 def handle_indirection(*, var, derefed_var) if @var_relationship @var_relationship[derefed_var] = var end end
start_function(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2518 def start_function(*) @var_relationship = {} @params = {} end
write_parameter(*, var)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 2529 def write_parameter(*, var) return unless @var_relationship && @params if ptr = @var_relationship[var] if @params.include?(ptr) @params[ptr][1] = true end end end