adlint 1.10.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +197 -4
 - data/MANIFEST +17 -0
 - data/NEWS +23 -4
 - data/etc/mesg.d/en_US/messages.yml +14 -1
 - data/etc/mesg.d/ja_JP/messages.yml +14 -1
 - data/features/message_detection/W0093.feature +87 -0
 - data/features/message_detection/W0687.feature +25 -0
 - data/features/message_detection/W0688.feature +63 -0
 - data/features/message_detection/W0689.feature +46 -0
 - data/features/message_detection/W0690.feature +35 -0
 - data/features/message_detection/W0698.feature +3 -2
 - data/features/message_detection/W0703.feature +1 -0
 - data/features/message_detection/W0723.feature +34 -0
 - data/features/message_detection/W0732.feature +158 -0
 - data/features/message_detection/W0733.feature +158 -0
 - data/features/message_detection/W0734.feature +322 -0
 - data/features/message_detection/W0735.feature +322 -0
 - data/features/message_detection/W1052.feature +66 -0
 - data/features/message_detection/W9001.feature +33 -0
 - data/features/message_detection/W9003.feature +131 -0
 - data/lib/adlint/c/ctrlexpr.rb +51 -50
 - data/lib/adlint/c/domain.rb +237 -223
 - data/lib/adlint/c/expr.rb +6 -8
 - data/lib/adlint/c/interp.rb +8 -11
 - data/lib/adlint/c/message.rb +20 -0
 - data/lib/adlint/c/message_shima.rb +63 -0
 - data/lib/adlint/c/object.rb +5 -4
 - data/lib/adlint/c/operator.rb +99 -0
 - data/lib/adlint/c/parser.rb +2 -2
 - data/lib/adlint/c/parser.y +2 -2
 - data/lib/adlint/c/phase.rb +6 -1
 - data/lib/adlint/c/syntax.rb +442 -30
 - data/lib/adlint/c/type.rb +449 -363
 - data/lib/adlint/c/value.rb +96 -25
 - data/lib/adlint/c.rb +1 -0
 - data/lib/adlint/prelude.rb +16 -18
 - data/lib/adlint/version.rb +2 -2
 - data/share/doc/developers_guide_ja.html +11 -5
 - data/share/doc/developers_guide_ja.texi +9 -3
 - data/share/doc/users_guide_en.html +697 -131
 - data/share/doc/users_guide_en.texi +491 -41
 - data/share/doc/users_guide_ja.html +709 -139
 - data/share/doc/users_guide_ja.texi +499 -45
 - data/spec/adlint/c/ctrlexpr_spec.rb +168 -0
 - data/spec/adlint/c/domain_spec.rb +835 -0
 - data/spec/adlint/c/operator_spec.rb +406 -0
 - data/spec/adlint/c/syntax_spec.rb +717 -0
 - data/spec/adlint/c/type_spec.rb +55 -30
 - metadata +19 -2
 
    
        data/lib/adlint/c/ctrlexpr.rb
    CHANGED
    
    | 
         @@ -34,6 +34,7 @@ require "adlint/c/object" 
     | 
|
| 
       34 
34 
     | 
    
         
             
            require "adlint/c/mediator"
         
     | 
| 
       35 
35 
     | 
    
         
             
            require "adlint/c/expr"
         
     | 
| 
       36 
36 
     | 
    
         
             
            require "adlint/c/conv"
         
     | 
| 
      
 37 
     | 
    
         
            +
            require "adlint/c/operator"
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
39 
     | 
    
         
             
            module AdLint #:nodoc:
         
     | 
| 
       39 
40 
     | 
    
         
             
            module C #:nodoc:
         
     | 
| 
         @@ -569,7 +570,7 @@ module C #:nodoc: 
     | 
|
| 
       569 
570 
     | 
    
         
             
                private
         
     | 
| 
       570 
571 
     | 
    
         
             
                def commit_changes(narrowing)
         
     | 
| 
       571 
572 
     | 
    
         
             
                  narrowing.narrowed_values.each do |variable, narrowed_value|
         
     | 
| 
       572 
     | 
    
         
            -
                    variable.narrow_value_domain!( 
     | 
| 
      
 573 
     | 
    
         
            +
                    variable.narrow_value_domain!(Operator::EQ, narrowed_value)
         
     | 
| 
       573 
574 
     | 
    
         
             
                  end
         
     | 
| 
       574 
575 
     | 
    
         
             
                end
         
     | 
| 
       575 
576 
     | 
    
         
             
              end
         
     | 
| 
         @@ -578,7 +579,7 @@ module C #:nodoc: 
     | 
|
| 
       578 
579 
     | 
    
         
             
                private
         
     | 
| 
       579 
580 
     | 
    
         
             
                def commit_changes(narrowing)
         
     | 
| 
       580 
581 
     | 
    
         
             
                  narrowing.narrowed_values.each do |variable, narrowed_value|
         
     | 
| 
       581 
     | 
    
         
            -
                    variable.widen_value_domain!( 
     | 
| 
      
 582 
     | 
    
         
            +
                    variable.widen_value_domain!(Operator::EQ, narrowed_value)
         
     | 
| 
       582 
583 
     | 
    
         
             
                  end
         
     | 
| 
       583 
584 
     | 
    
         
             
                end
         
     | 
| 
       584 
585 
     | 
    
         
             
              end
         
     | 
| 
         @@ -596,7 +597,8 @@ module C #:nodoc: 
     | 
|
| 
       596 
597 
     | 
    
         
             
                private
         
     | 
| 
       597 
598 
     | 
    
         
             
                def commit_changes(narrowing)
         
     | 
| 
       598 
599 
     | 
    
         
             
                  @branch_group.all_controlling_variables.each do |variable|
         
     | 
| 
       599 
     | 
    
         
            -
                    variable.narrow_value_domain!( 
     | 
| 
      
 600 
     | 
    
         
            +
                    variable.narrow_value_domain!(Operator::EQ,
         
     | 
| 
      
 601 
     | 
    
         
            +
                                                  variable.type.arbitrary_value)
         
     | 
| 
       600 
602 
     | 
    
         
             
                  end
         
     | 
| 
       601 
603 
     | 
    
         
             
                  true
         
     | 
| 
       602 
604 
     | 
    
         
             
                end
         
     | 
| 
         @@ -615,7 +617,8 @@ module C #:nodoc: 
     | 
|
| 
       615 
617 
     | 
    
         
             
                private
         
     | 
| 
       616 
618 
     | 
    
         
             
                def commit_changes(narrowing)
         
     | 
| 
       617 
619 
     | 
    
         
             
                  @branch_group.all_controlling_variables.each do |variable|
         
     | 
| 
       618 
     | 
    
         
            -
                    variable.widen_value_domain!( 
     | 
| 
      
 620 
     | 
    
         
            +
                    variable.widen_value_domain!(Operator::EQ,
         
     | 
| 
      
 621 
     | 
    
         
            +
                                                 variable.type.arbitrary_value)
         
     | 
| 
       619 
622 
     | 
    
         
             
                  end
         
     | 
| 
       620 
623 
     | 
    
         
             
                  true
         
     | 
| 
       621 
624 
     | 
    
         
             
                end
         
     | 
| 
         @@ -658,7 +661,7 @@ module C #:nodoc: 
     | 
|
| 
       658 
661 
     | 
    
         
             
                def ensure_result_equal_to(value)
         
     | 
| 
       659 
662 
     | 
    
         
             
                  if @result.variable? && @result.designated_by_lvalue?
         
     | 
| 
       660 
663 
     | 
    
         
             
                    if @result.value.scalar? && value.scalar?
         
     | 
| 
       661 
     | 
    
         
            -
                      ensure_relation(@result,  
     | 
| 
      
 664 
     | 
    
         
            +
                      ensure_relation(@result, Operator::EQ, value)
         
     | 
| 
       662 
665 
     | 
    
         
             
                    end
         
     | 
| 
       663 
666 
     | 
    
         
             
                  end
         
     | 
| 
       664 
667 
     | 
    
         
             
                end
         
     | 
| 
         @@ -688,10 +691,14 @@ module C #:nodoc: 
     | 
|
| 
       688 
691 
     | 
    
         
             
                  return lhs_result, rhs_result
         
     | 
| 
       689 
692 
     | 
    
         
             
                end
         
     | 
| 
       690 
693 
     | 
    
         | 
| 
       691 
     | 
    
         
            -
                def ensure_relation(variable,  
     | 
| 
       692 
     | 
    
         
            -
                   
     | 
| 
       693 
     | 
    
         
            -
                   
     | 
| 
       694 
     | 
    
         
            -
             
     | 
| 
      
 694 
     | 
    
         
            +
                def ensure_relation(variable, operator, value)
         
     | 
| 
      
 695 
     | 
    
         
            +
                  # NOTE: To avoid over-narrowing.
         
     | 
| 
      
 696 
     | 
    
         
            +
                  if value.definite? or
         
     | 
| 
      
 697 
     | 
    
         
            +
                      variable.value.contain?(value) && !value.contain?(variable.value)
         
     | 
| 
      
 698 
     | 
    
         
            +
                    target_value = save_original_value(variable).dup
         
     | 
| 
      
 699 
     | 
    
         
            +
                    target_value.narrow_domain!(operator, value)
         
     | 
| 
      
 700 
     | 
    
         
            +
                    update_narrowed_value(variable, target_value)
         
     | 
| 
      
 701 
     | 
    
         
            +
                  end
         
     | 
| 
       695 
702 
     | 
    
         
             
                end
         
     | 
| 
       696 
703 
     | 
    
         | 
| 
       697 
704 
     | 
    
         
             
                def save_original_value(variable)
         
     | 
| 
         @@ -712,7 +719,7 @@ module C #:nodoc: 
     | 
|
| 
       712 
719 
     | 
    
         | 
| 
       713 
720 
     | 
    
         
             
                  @narrowed_values = lhs_values.merge(rhs_values) { |key, lhs_val, rhs_val|
         
     | 
| 
       714 
721 
     | 
    
         
             
                    result = lhs_val.dup
         
     | 
| 
       715 
     | 
    
         
            -
                    result.narrow_domain!( 
     | 
| 
      
 722 
     | 
    
         
            +
                    result.narrow_domain!(Operator::EQ, rhs_val)
         
     | 
| 
       716 
723 
     | 
    
         
             
                    result
         
     | 
| 
       717 
724 
     | 
    
         
             
                  }
         
     | 
| 
       718 
725 
     | 
    
         
             
                end
         
     | 
| 
         @@ -723,7 +730,7 @@ module C #:nodoc: 
     | 
|
| 
       723 
730 
     | 
    
         | 
| 
       724 
731 
     | 
    
         
             
                  @narrowed_values = lhs_values.merge(rhs_values) { |key, lhs_val, rhs_val|
         
     | 
| 
       725 
732 
     | 
    
         
             
                    result = lhs_val.dup
         
     | 
| 
       726 
     | 
    
         
            -
                    result.widen_domain!( 
     | 
| 
      
 733 
     | 
    
         
            +
                    result.widen_domain!(Operator::EQ, rhs_val)
         
     | 
| 
       727 
734 
     | 
    
         
             
                    result
         
     | 
| 
       728 
735 
     | 
    
         
             
                  }
         
     | 
| 
       729 
736 
     | 
    
         
             
                end
         
     | 
| 
         @@ -739,7 +746,7 @@ module C #:nodoc: 
     | 
|
| 
       739 
746 
     | 
    
         
             
              class ValueComparison < ValueDomainNarrowing
         
     | 
| 
       740 
747 
     | 
    
         
             
                def initialize(value_domain_manip, node, lhs_narrowing, rhs_narrowing)
         
     | 
| 
       741 
748 
     | 
    
         
             
                  super
         
     | 
| 
       742 
     | 
    
         
            -
                  @ 
     | 
| 
      
 749 
     | 
    
         
            +
                  @operator = ComparisonOperator.new(node.operator)
         
     | 
| 
       743 
750 
     | 
    
         
             
                  @lhs_narrowing = lhs_narrowing
         
     | 
| 
       744 
751 
     | 
    
         
             
                  @rhs_narrowing = rhs_narrowing
         
     | 
| 
       745 
752 
     | 
    
         
             
                end
         
     | 
| 
         @@ -747,59 +754,53 @@ module C #:nodoc: 
     | 
|
| 
       747 
754 
     | 
    
         
             
                private
         
     | 
| 
       748 
755 
     | 
    
         
             
                def do_narrowing
         
     | 
| 
       749 
756 
     | 
    
         
             
                  @lhs_narrowing.execute!
         
     | 
| 
       750 
     | 
    
         
            -
                   
     | 
| 
      
 757 
     | 
    
         
            +
                  lhs_var = object_to_variable(@lhs_narrowing.result)
         
     | 
| 
       751 
758 
     | 
    
         | 
| 
       752 
759 
     | 
    
         
             
                  @rhs_narrowing.execute!
         
     | 
| 
       753 
     | 
    
         
            -
                   
     | 
| 
      
 760 
     | 
    
         
            +
                  rhs_var = object_to_variable(@rhs_narrowing.result)
         
     | 
| 
       754 
761 
     | 
    
         | 
| 
       755 
     | 
    
         
            -
                  unless  
     | 
| 
      
 762 
     | 
    
         
            +
                  unless lhs_var.type.scalar? && rhs_var.type.scalar?
         
     | 
| 
       756 
763 
     | 
    
         
             
                    return temporary_variable(int_type)
         
     | 
| 
       757 
764 
     | 
    
         
             
                  end
         
     | 
| 
       758 
765 
     | 
    
         | 
| 
       759 
     | 
    
         
            -
                  unless  
     | 
| 
      
 766 
     | 
    
         
            +
                  unless lhs_var.value.scalar? && rhs_var.value.scalar?
         
     | 
| 
       760 
767 
     | 
    
         
             
                    return temporary_variable(int_type)
         
     | 
| 
       761 
768 
     | 
    
         
             
                  end
         
     | 
| 
       762 
769 
     | 
    
         | 
| 
       763 
     | 
    
         
            -
                   
     | 
| 
       764 
     | 
    
         
            -
                    do_logical_arithmetic_conversion(@node,  
     | 
| 
       765 
     | 
    
         
            -
             
     | 
| 
       766 
     | 
    
         
            -
                  case @ 
     | 
| 
       767 
     | 
    
         
            -
                  when  
     | 
| 
       768 
     | 
    
         
            -
                    result = temporary_variable(int_type,
         
     | 
| 
       769 
     | 
    
         
            -
             
     | 
| 
       770 
     | 
    
         
            -
             
     | 
| 
       771 
     | 
    
         
            -
             
     | 
| 
       772 
     | 
    
         
            -
             
     | 
| 
       773 
     | 
    
         
            -
                  when  
     | 
| 
       774 
     | 
    
         
            -
                    result = temporary_variable(int_type,
         
     | 
| 
       775 
     | 
    
         
            -
             
     | 
| 
       776 
     | 
    
         
            -
             
     | 
| 
       777 
     | 
    
         
            -
             
     | 
| 
       778 
     | 
    
         
            -
             
     | 
| 
       779 
     | 
    
         
            -
                  when :<=
         
     | 
| 
       780 
     | 
    
         
            -
                    result = temporary_variable(int_type,
         
     | 
| 
       781 
     | 
    
         
            -
                                                lhs_converted.value <= rhs_converted.value)
         
     | 
| 
       782 
     | 
    
         
            -
                  when :>=
         
     | 
| 
       783 
     | 
    
         
            -
                    result = temporary_variable(int_type,
         
     | 
| 
       784 
     | 
    
         
            -
                                                lhs_converted.value >= rhs_converted.value)
         
     | 
| 
      
 770 
     | 
    
         
            +
                  lhs_conv, rhs_conv =
         
     | 
| 
      
 771 
     | 
    
         
            +
                    do_logical_arithmetic_conversion(@node, lhs_var, rhs_var)
         
     | 
| 
      
 772 
     | 
    
         
            +
             
     | 
| 
      
 773 
     | 
    
         
            +
                  case @operator
         
     | 
| 
      
 774 
     | 
    
         
            +
                  when Operator::EQ
         
     | 
| 
      
 775 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value == rhs_conv.value)
         
     | 
| 
      
 776 
     | 
    
         
            +
                  when Operator::NE
         
     | 
| 
      
 777 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value != rhs_conv.value)
         
     | 
| 
      
 778 
     | 
    
         
            +
                  when Operator::LT
         
     | 
| 
      
 779 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value < rhs_conv.value)
         
     | 
| 
      
 780 
     | 
    
         
            +
                  when Operator::GT
         
     | 
| 
      
 781 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value > rhs_conv.value)
         
     | 
| 
      
 782 
     | 
    
         
            +
                  when Operator::LE
         
     | 
| 
      
 783 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value <= rhs_conv.value)
         
     | 
| 
      
 784 
     | 
    
         
            +
                  when Operator::GE
         
     | 
| 
      
 785 
     | 
    
         
            +
                    result = temporary_variable(int_type, lhs_conv.value >= rhs_conv.value)
         
     | 
| 
       785 
786 
     | 
    
         
             
                  else
         
     | 
| 
       786 
     | 
    
         
            -
                     
     | 
| 
      
 787 
     | 
    
         
            +
                    __NOTREACHED__
         
     | 
| 
       787 
788 
     | 
    
         
             
                  end
         
     | 
| 
       788 
789 
     | 
    
         | 
| 
       789 
     | 
    
         
            -
                  case @ 
     | 
| 
       790 
     | 
    
         
            -
                  when  
     | 
| 
       791 
     | 
    
         
            -
                    notify_equality_expr_evaled(@node,
         
     | 
| 
       792 
     | 
    
         
            -
             
     | 
| 
       793 
     | 
    
         
            -
             
     | 
| 
       794 
     | 
    
         
            -
             
     | 
| 
       795 
     | 
    
         
            -
             
     | 
| 
      
 790 
     | 
    
         
            +
                  case @operator
         
     | 
| 
      
 791 
     | 
    
         
            +
                  when Operator::EQ, Operator::NE
         
     | 
| 
      
 792 
     | 
    
         
            +
                    notify_equality_expr_evaled(@node, lhs_conv, rhs_conv, result)
         
     | 
| 
      
 793 
     | 
    
         
            +
                  when Operator::LT, Operator::GT, Operator::LE, Operator::GE
         
     | 
| 
      
 794 
     | 
    
         
            +
                    notify_relational_expr_evaled(@node, lhs_conv, rhs_conv, result)
         
     | 
| 
      
 795 
     | 
    
         
            +
                  else
         
     | 
| 
      
 796 
     | 
    
         
            +
                    __NOTREACHED__
         
     | 
| 
       796 
797 
     | 
    
         
             
                  end
         
     | 
| 
       797 
798 
     | 
    
         | 
| 
       798 
799 
     | 
    
         
             
                  case
         
     | 
| 
       799 
     | 
    
         
            -
                  when  
     | 
| 
       800 
     | 
    
         
            -
                    ensure_relation( 
     | 
| 
       801 
     | 
    
         
            -
                  when  
     | 
| 
       802 
     | 
    
         
            -
                    ensure_relation( 
     | 
| 
      
 800 
     | 
    
         
            +
                  when lhs_conv.designated_by_lvalue?
         
     | 
| 
      
 801 
     | 
    
         
            +
                    ensure_relation(lhs_conv, @operator, rhs_conv.value)
         
     | 
| 
      
 802 
     | 
    
         
            +
                  when rhs_conv.designated_by_lvalue?
         
     | 
| 
      
 803 
     | 
    
         
            +
                    ensure_relation(rhs_conv, @operator.for_commutation, lhs_conv.value)
         
     | 
| 
       803 
804 
     | 
    
         
             
                  else
         
     | 
| 
       804 
805 
     | 
    
         
             
                    # NOTE: Domain of the rvalue should not be narrowed.
         
     | 
| 
       805 
806 
     | 
    
         
             
                  end
         
     |