adlint 1.18.2 → 1.18.6
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 +30 -0
- data/NEWS +10 -3
- data/etc/mesg.d/en_US/messages.yml +1 -1
- data/etc/mesg.d/ja_JP/messages.yml +1 -1
- data/lib/adlint/c/interp.rb +101 -62
- data/lib/adlint/c/object.rb +5 -6
- data/lib/adlint/c/type.rb +136 -185
- data/lib/adlint/version.rb +2 -2
- data/share/doc/developers_guide_ja.html +3 -3
- data/share/doc/developers_guide_ja.texi +1 -1
- data/share/doc/users_guide_en.html +3 -3
- data/share/doc/users_guide_en.texi +1 -1
- data/share/doc/users_guide_ja.html +4 -4
- data/share/doc/users_guide_ja.texi +2 -2
- metadata +2 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,33 @@
|
|
1
|
+
Tue Aug 14 14:54:55 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
|
+
|
3
|
+
* release.ga : 1.18.6
|
4
|
+
- Fix abend problem when a variable of typedefed incomplete array
|
5
|
+
type is defined with an initializer.
|
6
|
+
|
7
|
+
Tue Aug 14 10:49:35 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
8
|
+
|
9
|
+
* release.rc : 1.18.5
|
10
|
+
- Fix bad array length deduction in an array variable definition with
|
11
|
+
string-literal-specifier as initializer.
|
12
|
+
|
13
|
+
Tue Aug 14 10:37:24 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
14
|
+
|
15
|
+
* lib/adlint/c/interp.rb : Fix bad array length deduction in an array
|
16
|
+
variable definition with string-literal-specifier as initializer.
|
17
|
+
|
18
|
+
Mon Aug 13 18:14:49 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
19
|
+
|
20
|
+
* release.rc : 1.18.3
|
21
|
+
- Fix abend problem when a variable of typedefed incomplete array
|
22
|
+
type is defined with an initializer.
|
23
|
+
|
24
|
+
Mon Aug 13 18:01:12 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
25
|
+
|
26
|
+
* lib/adlint/c/interp.rb : Fix abend problem when a variable of
|
27
|
+
typedefed incomplete array type is defined with an initializer.
|
28
|
+
* lib/adlint/c/object.rb : Ditto.
|
29
|
+
* lib/adlint/c/type.rb : Ditto.
|
30
|
+
|
1
31
|
Fri Aug 3 13:07:04 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
32
|
|
3
33
|
* release.ga : 1.18.2
|
data/NEWS
CHANGED
@@ -21,16 +21,23 @@
|
|
21
21
|
|
22
22
|
++
|
23
23
|
|
24
|
-
=== \AdLint 1.18.
|
24
|
+
=== \AdLint 1.18.6 is released (2012-08-14)
|
25
25
|
|
26
|
-
==== Changes since the 1.18.
|
26
|
+
==== Changes since the 1.18.2 release
|
27
27
|
|
28
|
-
* Fix
|
28
|
+
* Fix abend problem when a variable of typedefed incomplete array type is
|
29
|
+
defined with an initializer
|
29
30
|
|
30
31
|
See the file
|
31
32
|
{ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
|
32
33
|
for more details.
|
33
34
|
|
35
|
+
=== \AdLint 1.18.2 is released (2012-08-03)
|
36
|
+
|
37
|
+
==== Changes since the 1.18.0 release
|
38
|
+
|
39
|
+
* Fix gem installation problem on mswin
|
40
|
+
|
34
41
|
=== \AdLint 1.18.0 is released (2012-08-01)
|
35
42
|
|
36
43
|
==== Changes since the 1.16.0 release
|
data/lib/adlint/c/interp.rb
CHANGED
@@ -585,8 +585,8 @@ module C #:nodoc:
|
|
585
585
|
decl.mark_as_referred_by(node.identifier)
|
586
586
|
end
|
587
587
|
|
588
|
-
if
|
589
|
-
init_var, converted = evaluate_initializer(
|
588
|
+
if node.initializer
|
589
|
+
init_var, converted = evaluate_initializer(node)
|
590
590
|
variable = define_variable(node, converted.value.to_defined_value)
|
591
591
|
|
592
592
|
notify_variable_value_referred(node, init_var)
|
@@ -654,27 +654,33 @@ module C #:nodoc:
|
|
654
654
|
end
|
655
655
|
|
656
656
|
private
|
657
|
-
def evaluate_initializer(
|
657
|
+
def evaluate_initializer(definition)
|
658
658
|
init_interp = InitializerInterpreter.new(interpreter)
|
659
|
-
variable, converted = init_interp.execute(
|
659
|
+
variable, converted = init_interp.execute(definition)
|
660
660
|
|
661
|
-
# NOTE: An implicit conversion
|
661
|
+
# NOTE: An implicit conversion and size deduction of an incomplete array
|
662
|
+
# have been done by InitializerInterpreter.
|
662
663
|
|
663
664
|
# NOTE: For the case of array variable definition with a
|
664
665
|
# string-literal-specifier as the initializer.
|
665
|
-
if
|
666
|
+
if definition.type.array? && variable.type.pointer?
|
666
667
|
unless array = pointee_of(variable) and array.type.array?
|
667
|
-
array = temporary_variable(
|
668
|
+
array = temporary_variable(definition.type)
|
668
669
|
end
|
669
|
-
deduct_array_length_from_array_variable(
|
670
|
+
deduct_array_length_from_array_variable(definition, array)
|
670
671
|
variable = converted = array
|
671
672
|
end
|
672
673
|
|
673
674
|
return variable, converted
|
674
675
|
end
|
675
676
|
|
676
|
-
def deduct_array_length_from_array_variable(
|
677
|
-
|
677
|
+
def deduct_array_length_from_array_variable(definition, array)
|
678
|
+
unless definition.type.length
|
679
|
+
if definition.type.user?
|
680
|
+
definition.type = definition.type.dup
|
681
|
+
end
|
682
|
+
definition.type.length = array.type.length
|
683
|
+
end
|
678
684
|
end
|
679
685
|
|
680
686
|
def evaluate_sequence_point(full_declarator)
|
@@ -694,27 +700,33 @@ module C #:nodoc:
|
|
694
700
|
@interpreter = interpreter
|
695
701
|
end
|
696
702
|
|
697
|
-
def execute(
|
698
|
-
checkpoint(initializer.location)
|
703
|
+
def execute(definition)
|
704
|
+
checkpoint(definition.initializer.location)
|
699
705
|
|
700
706
|
case
|
701
|
-
when expression = initializer.expression
|
707
|
+
when expression = definition.initializer.expression
|
702
708
|
# NOTE: An implicit conversion is already notified in
|
703
709
|
# #evaluate_expression.
|
704
|
-
return evaluate_expression(expression,
|
705
|
-
when initializers = initializer.initializers
|
706
|
-
variable = evaluate_initializers(initializers,
|
710
|
+
return evaluate_expression(expression, definition.type)
|
711
|
+
when initializers = definition.initializer.initializers
|
712
|
+
variable = evaluate_initializers(initializers, definition.type)
|
713
|
+
|
714
|
+
# NOTE: Size deduction of an incomplete array type have been done by
|
715
|
+
# #evaluate_initializers.
|
716
|
+
if definition.type.array? && variable.type.array?
|
717
|
+
definition.type = variable.type unless definition.type.length
|
718
|
+
end
|
707
719
|
|
708
|
-
if variable.type.same_as?(
|
720
|
+
if variable.type.same_as?(definition.type)
|
709
721
|
converted = variable
|
710
722
|
else
|
711
723
|
converted =
|
712
|
-
do_conversion(variable,
|
713
|
-
temporary_variable(
|
724
|
+
do_conversion(variable, definition.type) ||
|
725
|
+
temporary_variable(definition.type)
|
714
726
|
notify_implicit_conv_performed(initializer, variable, converted)
|
715
727
|
end
|
716
728
|
else
|
717
|
-
variable = converted = temporary_variable(
|
729
|
+
variable = converted = temporary_variable(definition.type)
|
718
730
|
end
|
719
731
|
|
720
732
|
return variable, converted
|
@@ -741,70 +753,97 @@ module C #:nodoc:
|
|
741
753
|
return variable, converted
|
742
754
|
end
|
743
755
|
|
744
|
-
def evaluate_initializers(initializers,
|
745
|
-
|
746
|
-
#
|
747
|
-
# 6.7.8 Initialization
|
748
|
-
#
|
749
|
-
# Semantics
|
750
|
-
#
|
751
|
-
# 10 If an object that has automatic storage duration is not initialized
|
752
|
-
# explicitly, its value is indeterminate. If an object that has
|
753
|
-
# static storage duration is not initialized explicitly, then:
|
754
|
-
# -- if it has pointer type, it is initialized to a null pointer;
|
755
|
-
# -- if it has arithmetic type, it is initialized to (positive or
|
756
|
-
# unsigned) zero;
|
757
|
-
# -- if it is an aggregate, every member is initialized (recursively)
|
758
|
-
# according to these rules;
|
759
|
-
# -- if it is a union, the first named member is initialized
|
760
|
-
# (recursively) according to these rules.
|
761
|
-
if variable_type.union?
|
762
|
-
if first_member = variable_type.members.first
|
763
|
-
first_object = evaluate_initializers(initializers, first_member.type)
|
764
|
-
return temporary_variable(variable_type, value_of(first_object))
|
765
|
-
else
|
766
|
-
return temporary_variable(variable_type)
|
767
|
-
end
|
756
|
+
def evaluate_initializers(initializers, type)
|
757
|
+
if type.union?
|
768
758
|
end
|
769
759
|
|
770
760
|
case
|
771
|
-
when
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
761
|
+
when type.union?
|
762
|
+
# NOTE: The ISO C99 standard saids;
|
763
|
+
#
|
764
|
+
# 6.7.8 Initialization
|
765
|
+
#
|
766
|
+
# Semantics
|
767
|
+
#
|
768
|
+
# 10 If an object that has automatic storage duration is not
|
769
|
+
# initialized explicitly, its value is indeterminate. If an object
|
770
|
+
# that has static storage duration is not initialized explicitly,
|
771
|
+
# then:
|
772
|
+
# -- if it has pointer type, it is initialized to a null pointer;
|
773
|
+
# -- if it has arithmetic type, it is initialized to (positive or
|
774
|
+
# unsigned) zero;
|
775
|
+
# -- if it is an aggregate, every member is initialized
|
776
|
+
# (recursively) according to these rules;
|
777
|
+
# -- if it is a union, the first named member is initialized
|
778
|
+
# (recursively) according to these rules.
|
779
|
+
if first_member = type.members.first
|
780
|
+
first_object = evaluate_initializers(initializers, first_member.type)
|
781
|
+
return temporary_variable(type, value_of(first_object))
|
782
|
+
else
|
783
|
+
return temporary_variable(type)
|
784
|
+
end
|
785
|
+
when type.array?
|
786
|
+
# NOTE: The ISO C99 standard saids;
|
787
|
+
#
|
788
|
+
# 6.7.2.1 Structure and union specifiers
|
789
|
+
#
|
790
|
+
# Constraints
|
791
|
+
#
|
792
|
+
# 2 A structure or union shall not contain a member with incomplete
|
793
|
+
# or function type (hence, a structure shall not contain an
|
794
|
+
# instance of itself, but may contain a pointer to an instance of
|
795
|
+
# itself), except that the last member of a structure with more
|
796
|
+
# than one named member may have incomplete array type; such a
|
797
|
+
# structure (and any union containing, possibly recursively, a
|
798
|
+
# member that is such a structure) shall not be a member of a
|
799
|
+
# structure or an element of an array.
|
800
|
+
#
|
801
|
+
# NOTE: Size of the last incomplete array member should not be
|
802
|
+
# deducted in initialization. It is treated as a pointer.
|
803
|
+
#
|
804
|
+
# NOTE: ISO C90 does not support flexible array members.
|
805
|
+
type = deduct_array_length_from_initializers(type, initializers)
|
806
|
+
member_types = [type.unqualify.base_type] * type.impl_length
|
807
|
+
when type.struct?
|
808
|
+
member_types = type.members.map { |member| member.type }
|
776
809
|
else
|
777
|
-
member_types = [
|
810
|
+
member_types = [type]
|
778
811
|
end
|
779
812
|
|
780
|
-
values = member_types.zip(initializers).map { |
|
813
|
+
values = member_types.zip(initializers).map { |memb_type, initializer|
|
781
814
|
if initializer
|
782
815
|
checkpoint(initializer.location)
|
783
816
|
case
|
784
817
|
when expression = initializer.expression
|
785
|
-
value_of(evaluate_expression(expression,
|
818
|
+
value_of(evaluate_expression(expression, memb_type).last)
|
786
819
|
when initializers = initializer.initializers
|
787
|
-
value_of(evaluate_initializers(initializers,
|
820
|
+
value_of(evaluate_initializers(initializers, memb_type))
|
788
821
|
else
|
789
|
-
|
822
|
+
memb_type.undefined_value
|
790
823
|
end
|
791
824
|
else
|
792
|
-
|
825
|
+
memb_type.undefined_value
|
793
826
|
end
|
794
827
|
}
|
795
828
|
|
796
829
|
case
|
797
|
-
when
|
798
|
-
temporary_variable(
|
799
|
-
when
|
800
|
-
temporary_variable(
|
830
|
+
when type.array?
|
831
|
+
temporary_variable(type, ArrayValue.new(values))
|
832
|
+
when type.composite?
|
833
|
+
temporary_variable(type, CompositeValue.new(values))
|
801
834
|
else
|
802
|
-
temporary_variable(
|
835
|
+
temporary_variable(type, values.first)
|
803
836
|
end
|
804
837
|
end
|
805
838
|
|
806
|
-
def deduct_array_length_from_initializers(
|
807
|
-
|
839
|
+
def deduct_array_length_from_initializers(orig_array_type, initializers)
|
840
|
+
unless orig_array_type.length
|
841
|
+
if orig_array_type.user?
|
842
|
+
orig_array_type = orig_array_type.dup
|
843
|
+
end
|
844
|
+
orig_array_type.length = initializers.size
|
845
|
+
end
|
846
|
+
orig_array_type
|
808
847
|
end
|
809
848
|
|
810
849
|
def interpreter
|
data/lib/adlint/c/object.rb
CHANGED
@@ -304,7 +304,7 @@ module C #:nodoc:
|
|
304
304
|
super(memory, declaration_or_definition, type, scope)
|
305
305
|
|
306
306
|
# TODO: If too slow, make an index of inner variables.
|
307
|
-
@inner_variables = create_inner_variables(type, scope)
|
307
|
+
@inner_variables = create_inner_variables(type.unqualify, scope)
|
308
308
|
end
|
309
309
|
|
310
310
|
def enter_value_versioning_group
|
@@ -573,8 +573,7 @@ module C #:nodoc:
|
|
573
573
|
class AliasVariable < NamedVariable
|
574
574
|
def initialize(variable)
|
575
575
|
super(variable.binding.memory,
|
576
|
-
variable.declarations_and_definitions.first,
|
577
|
-
variable.scope)
|
576
|
+
variable.declarations_and_definitions.first, variable.scope)
|
578
577
|
end
|
579
578
|
|
580
579
|
private
|
@@ -1116,9 +1115,9 @@ module C #:nodoc:
|
|
1116
1115
|
|
1117
1116
|
def write(value)
|
1118
1117
|
super
|
1119
|
-
if !@windows.empty?
|
1120
|
-
|
1121
|
-
|
1118
|
+
if !@windows.empty? and
|
1119
|
+
@value.array? && value.array? or
|
1120
|
+
@value.composite? && value.composite?
|
1122
1121
|
single_value = value.to_single_value
|
1123
1122
|
@windows.zip(single_value.values).each do |window, inner_value|
|
1124
1123
|
window.write(inner_value, false)
|
data/lib/adlint/c/type.rb
CHANGED
@@ -341,6 +341,10 @@ module C #:nodoc:
|
|
341
341
|
subclass_responsibility
|
342
342
|
end
|
343
343
|
|
344
|
+
def length=(len)
|
345
|
+
subclass_responsibility
|
346
|
+
end
|
347
|
+
|
344
348
|
def impl_length
|
345
349
|
subclass_responsibility
|
346
350
|
end
|
@@ -590,6 +594,10 @@ module C #:nodoc:
|
|
590
594
|
end
|
591
595
|
end
|
592
596
|
|
597
|
+
def dup
|
598
|
+
subclass_responsibility
|
599
|
+
end
|
600
|
+
|
593
601
|
def inspect
|
594
602
|
if @name == image
|
595
603
|
if location
|
@@ -1144,6 +1152,10 @@ module C #:nodoc:
|
|
1144
1152
|
def corresponding_unsigned_type
|
1145
1153
|
self # NOTREACHED
|
1146
1154
|
end
|
1155
|
+
|
1156
|
+
def dup
|
1157
|
+
UndeclaredType.new(type_table)
|
1158
|
+
end
|
1147
1159
|
end
|
1148
1160
|
|
1149
1161
|
class UnresolvedType < Type
|
@@ -1651,6 +1663,10 @@ module C #:nodoc:
|
|
1651
1663
|
def corresponding_unsigned_type
|
1652
1664
|
self # NOTREACHED
|
1653
1665
|
end
|
1666
|
+
|
1667
|
+
def dup
|
1668
|
+
UnresolvedType.new(type_table)
|
1669
|
+
end
|
1654
1670
|
end
|
1655
1671
|
|
1656
1672
|
class QualifiedType < Type
|
@@ -1663,10 +1679,6 @@ module C #:nodoc:
|
|
1663
1679
|
|
1664
1680
|
attr_reader :base_type
|
1665
1681
|
|
1666
|
-
def declarations
|
1667
|
-
@base_type.declarations
|
1668
|
-
end
|
1669
|
-
|
1670
1682
|
def id
|
1671
1683
|
@id ||= QualifiedTypeId.new(@base_type, @cvr_qualifiers)
|
1672
1684
|
end
|
@@ -1679,37 +1691,21 @@ module C #:nodoc:
|
|
1679
1691
|
@brief_image ||= create_brief_image(@base_type, @cvr_qualifiers)
|
1680
1692
|
end
|
1681
1693
|
|
1682
|
-
|
1683
|
-
@base_type.location
|
1684
|
-
end
|
1685
|
-
|
1686
|
-
def bit_size
|
1687
|
-
@base_type.bit_size
|
1688
|
-
end
|
1694
|
+
extend Forwardable
|
1689
1695
|
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1696
|
+
def_delegator :@base_type, :declarations
|
1697
|
+
def_delegator :@base_type, :location
|
1698
|
+
def_delegator :@base_type, :bit_size
|
1699
|
+
def_delegator :@base_type, :bit_alignment
|
1693
1700
|
|
1694
1701
|
def real_type
|
1695
1702
|
type_table.qualified_type(@base_type.real_type, *@cvr_qualifiers)
|
1696
1703
|
end
|
1697
1704
|
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
def incomplete?
|
1703
|
-
@base_type.incomplete?
|
1704
|
-
end
|
1705
|
-
|
1706
|
-
def compatible?(to_type)
|
1707
|
-
@base_type.compatible?(to_type)
|
1708
|
-
end
|
1709
|
-
|
1710
|
-
def coercible?(to_type)
|
1711
|
-
@base_type.coercible?(to_type)
|
1712
|
-
end
|
1705
|
+
def_delegator :@base_type, :unqualify
|
1706
|
+
def_delegator :@base_type, :incomplete?
|
1707
|
+
def_delegator :@base_type, :compatible?
|
1708
|
+
def_delegator :@base_type, :coercible?
|
1713
1709
|
|
1714
1710
|
def more_cv_qualified?(than_type)
|
1715
1711
|
# NOTE: The term `more cv-qualified' means:
|
@@ -1733,65 +1729,25 @@ module C #:nodoc:
|
|
1733
1729
|
end
|
1734
1730
|
end
|
1735
1731
|
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
def floating?
|
1745
|
-
@base_type.floating?
|
1746
|
-
end
|
1747
|
-
|
1748
|
-
def array?
|
1749
|
-
@base_type.array?
|
1750
|
-
end
|
1751
|
-
|
1752
|
-
def struct?
|
1753
|
-
@base_type.struct?
|
1754
|
-
end
|
1755
|
-
|
1756
|
-
def union?
|
1757
|
-
@base_type.union?
|
1758
|
-
end
|
1759
|
-
|
1760
|
-
def pointer?
|
1761
|
-
@base_type.pointer?
|
1762
|
-
end
|
1732
|
+
def_delegator :@base_type, :scalar?
|
1733
|
+
def_delegator :@base_type, :integer?
|
1734
|
+
def_delegator :@base_type, :floating?
|
1735
|
+
def_delegator :@base_type, :array?
|
1736
|
+
def_delegator :@base_type, :struct?
|
1737
|
+
def_delegator :@base_type, :union?
|
1738
|
+
def_delegator :@base_type, :pointer?
|
1763
1739
|
|
1764
1740
|
def qualified?
|
1765
1741
|
true
|
1766
1742
|
end
|
1767
1743
|
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
def user?
|
1777
|
-
@base_type.user?
|
1778
|
-
end
|
1779
|
-
|
1780
|
-
def void?
|
1781
|
-
@base_type.void?
|
1782
|
-
end
|
1783
|
-
|
1784
|
-
def standard?
|
1785
|
-
@base_type.standard?
|
1786
|
-
end
|
1787
|
-
|
1788
|
-
def undeclared?
|
1789
|
-
@base_type.undeclared?
|
1790
|
-
end
|
1791
|
-
|
1792
|
-
def unresolved?
|
1793
|
-
@base_type.unresolved?
|
1794
|
-
end
|
1744
|
+
def_delegator :@base_type, :function?
|
1745
|
+
def_delegator :@base_type, :enum?
|
1746
|
+
def_delegator :@base_type, :user?
|
1747
|
+
def_delegator :@base_type, :void?
|
1748
|
+
def_delegator :@base_type, :standard?
|
1749
|
+
def_delegator :@base_type, :undeclared?
|
1750
|
+
def_delegator :@base_type, :unresolved?
|
1795
1751
|
|
1796
1752
|
def const?
|
1797
1753
|
@cvr_qualifiers.include?(:const)
|
@@ -1805,107 +1761,32 @@ module C #:nodoc:
|
|
1805
1761
|
@cvr_qualifiers.include?(:restrict)
|
1806
1762
|
end
|
1807
1763
|
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
end
|
1835
|
-
|
1836
|
-
def length
|
1837
|
-
@base_type.length
|
1838
|
-
end
|
1839
|
-
|
1840
|
-
def impl_length
|
1841
|
-
@base_type.impl_length
|
1842
|
-
end
|
1843
|
-
|
1844
|
-
def members
|
1845
|
-
@base_type.members
|
1846
|
-
end
|
1847
|
-
|
1848
|
-
def member_named(name)
|
1849
|
-
@base_type.member_named(name)
|
1850
|
-
end
|
1851
|
-
|
1852
|
-
def min_value
|
1853
|
-
@base_type.min_value
|
1854
|
-
end
|
1855
|
-
|
1856
|
-
def max_value
|
1857
|
-
@base_type.max_value
|
1858
|
-
end
|
1859
|
-
|
1860
|
-
def nil_value
|
1861
|
-
@base_type.nil_value
|
1862
|
-
end
|
1863
|
-
|
1864
|
-
def zero_value
|
1865
|
-
@base_type.zero_value
|
1866
|
-
end
|
1867
|
-
|
1868
|
-
def arbitrary_value
|
1869
|
-
@base_type.arbitrary_value
|
1870
|
-
end
|
1871
|
-
|
1872
|
-
def undefined_value
|
1873
|
-
@base_type.undefined_value
|
1874
|
-
end
|
1875
|
-
|
1876
|
-
def parameter_value
|
1877
|
-
@base_type.parameter_value
|
1878
|
-
end
|
1879
|
-
|
1880
|
-
def return_value
|
1881
|
-
@base_type.return_value
|
1882
|
-
end
|
1883
|
-
|
1884
|
-
def coerce_scalar_value(value)
|
1885
|
-
@base_type.coerce_scalar_value(value)
|
1886
|
-
end
|
1887
|
-
|
1888
|
-
def coerce_array_value(value)
|
1889
|
-
@base_type.coerce_array_value(value)
|
1890
|
-
end
|
1891
|
-
|
1892
|
-
def coerce_composite_value(value)
|
1893
|
-
@base_type.coerce_composite_value(value)
|
1894
|
-
end
|
1895
|
-
|
1896
|
-
def integer_conversion_rank
|
1897
|
-
@base_type.integer_conversion_rank
|
1898
|
-
end
|
1899
|
-
|
1900
|
-
def integer_promoted_type
|
1901
|
-
@base_type.integer_promoted_type
|
1902
|
-
end
|
1903
|
-
|
1904
|
-
def argument_promoted_type
|
1905
|
-
@base_type.argument_promoted_type
|
1906
|
-
end
|
1907
|
-
|
1908
|
-
extend Forwardable
|
1764
|
+
def_delegator :@base_type, :bitfield?
|
1765
|
+
def_delegator :@base_type, :signed?
|
1766
|
+
def_delegator :@base_type, :explicitly_signed?
|
1767
|
+
def_delegator :@base_type, :have_va_list?
|
1768
|
+
def_delegator :@base_type, :return_type
|
1769
|
+
def_delegator :@base_type, :parameter_types
|
1770
|
+
def_delegator :@base_type, :enumerators
|
1771
|
+
def_delegator :@base_type, :length
|
1772
|
+
def_delegator :@base_type, :length=
|
1773
|
+
def_delegator :@base_type, :impl_length
|
1774
|
+
def_delegator :@base_type, :members
|
1775
|
+
def_delegator :@base_type, :member_named
|
1776
|
+
def_delegator :@base_type, :min_value
|
1777
|
+
def_delegator :@base_type, :max_value
|
1778
|
+
def_delegator :@base_type, :nil_value
|
1779
|
+
def_delegator :@base_type, :zero_value
|
1780
|
+
def_delegator :@base_type, :arbitrary_value
|
1781
|
+
def_delegator :@base_type, :undefined_value
|
1782
|
+
def_delegator :@base_type, :parameter_value
|
1783
|
+
def_delegator :@base_type, :return_value
|
1784
|
+
def_delegator :@base_type, :coerce_scalar_value
|
1785
|
+
def_delegator :@base_type, :coerce_array_value
|
1786
|
+
def_delegator :@base_type, :coerce_composite_value
|
1787
|
+
def_delegator :@base_type, :integer_conversion_rank
|
1788
|
+
def_delegator :@base_type, :integer_promoted_type
|
1789
|
+
def_delegator :@base_type, :argument_promoted_type
|
1909
1790
|
|
1910
1791
|
def_delegator :@base_type, :arithmetic_type_with
|
1911
1792
|
def_delegator :@base_type, :_arithmetic_type_with_undeclared
|
@@ -1952,6 +1833,10 @@ module C #:nodoc:
|
|
1952
1833
|
def_delegator :@base_type, :corresponding_signed_type
|
1953
1834
|
def_delegator :@base_type, :corresponding_unsigned_type
|
1954
1835
|
|
1836
|
+
def dup
|
1837
|
+
QualifiedType.new(type_table, @base_type.dup, *@cvr_qualifiers)
|
1838
|
+
end
|
1839
|
+
|
1955
1840
|
private
|
1956
1841
|
def create_name(base_type, cvr_qualifiers)
|
1957
1842
|
append_cvr_qualifiers(base_type.name, cvr_qualifiers)
|
@@ -2487,6 +2372,10 @@ module C #:nodoc:
|
|
2487
2372
|
def corresponding_unsigned_type
|
2488
2373
|
self # NOTREACHED
|
2489
2374
|
end
|
2375
|
+
|
2376
|
+
def dup
|
2377
|
+
VoidType.new(type_table)
|
2378
|
+
end
|
2490
2379
|
end
|
2491
2380
|
|
2492
2381
|
class FunctionType < Type
|
@@ -3019,6 +2908,11 @@ module C #:nodoc:
|
|
3019
2908
|
end
|
3020
2909
|
end
|
3021
2910
|
|
2911
|
+
def dup
|
2912
|
+
FunctionType.new(type_table, @return_type.dup,
|
2913
|
+
@parameter_types.map { |t| t.dup }, @have_va_list)
|
2914
|
+
end
|
2915
|
+
|
3022
2916
|
private
|
3023
2917
|
def create_name(return_type, parameter_types, have_va_list)
|
3024
2918
|
"#{return_type.name}(" +
|
@@ -3467,6 +3361,10 @@ module C #:nodoc:
|
|
3467
3361
|
def corresponding_unsigned_type
|
3468
3362
|
subclass_responsibility
|
3469
3363
|
end
|
3364
|
+
|
3365
|
+
def dup
|
3366
|
+
subclass_responsibility
|
3367
|
+
end
|
3470
3368
|
end
|
3471
3369
|
|
3472
3370
|
class IntegerType < ScalarDataType
|
@@ -3619,6 +3517,10 @@ module C #:nodoc:
|
|
3619
3517
|
def corresponding_unsigned_type
|
3620
3518
|
subclass_responsibility
|
3621
3519
|
end
|
3520
|
+
|
3521
|
+
def dup
|
3522
|
+
subclass_responsibility
|
3523
|
+
end
|
3622
3524
|
end
|
3623
3525
|
|
3624
3526
|
class StandardIntegerType < IntegerType
|
@@ -3665,6 +3567,10 @@ module C #:nodoc:
|
|
3665
3567
|
def corresponding_unsigned_type
|
3666
3568
|
subclass_responsibility
|
3667
3569
|
end
|
3570
|
+
|
3571
|
+
def dup
|
3572
|
+
self.class.new(type_table)
|
3573
|
+
end
|
3668
3574
|
end
|
3669
3575
|
|
3670
3576
|
class CharType < StandardIntegerType
|
@@ -4022,7 +3928,6 @@ module C #:nodoc:
|
|
4022
3928
|
def corresponding_unsigned_type
|
4023
3929
|
unsigned_short_int_type
|
4024
3930
|
end
|
4025
|
-
|
4026
3931
|
end
|
4027
3932
|
|
4028
3933
|
class ShortIntTypeId < StandardTypeId
|
@@ -4966,6 +4871,10 @@ module C #:nodoc:
|
|
4966
4871
|
def corresponding_unsigned_type
|
4967
4872
|
self # NOTREACHED
|
4968
4873
|
end
|
4874
|
+
|
4875
|
+
def dup
|
4876
|
+
BitfieldType.new(type_table, @base_type.dup, bit_size)
|
4877
|
+
end
|
4969
4878
|
end
|
4970
4879
|
|
4971
4880
|
class BitfieldTypeId < TypeId
|
@@ -5096,6 +5005,10 @@ module C #:nodoc:
|
|
5096
5005
|
def corresponding_unsigned_type
|
5097
5006
|
unsigned_int_type
|
5098
5007
|
end
|
5008
|
+
|
5009
|
+
def dup
|
5010
|
+
EnumType.new(type_table, declarations.first)
|
5011
|
+
end
|
5099
5012
|
end
|
5100
5013
|
|
5101
5014
|
class EnumTypeId < TypeId
|
@@ -5210,6 +5123,10 @@ module C #:nodoc:
|
|
5210
5123
|
self # NOTREACHED
|
5211
5124
|
end
|
5212
5125
|
|
5126
|
+
def dup
|
5127
|
+
PointerType.new(type_table, @base_type.dup)
|
5128
|
+
end
|
5129
|
+
|
5213
5130
|
private
|
5214
5131
|
def create_name(base_type)
|
5215
5132
|
if base_type.function?
|
@@ -5374,6 +5291,10 @@ module C #:nodoc:
|
|
5374
5291
|
self # NOTREACHED
|
5375
5292
|
end
|
5376
5293
|
|
5294
|
+
def dup
|
5295
|
+
subclass_responsibility
|
5296
|
+
end
|
5297
|
+
|
5377
5298
|
private
|
5378
5299
|
def fraction_bit_size
|
5379
5300
|
subclass_responsibility
|
@@ -5388,6 +5309,10 @@ module C #:nodoc:
|
|
5388
5309
|
def standard?
|
5389
5310
|
true
|
5390
5311
|
end
|
5312
|
+
|
5313
|
+
def dup
|
5314
|
+
self.class.new(type_table)
|
5315
|
+
end
|
5391
5316
|
end
|
5392
5317
|
|
5393
5318
|
class FloatType < StandardFloatingType
|
@@ -6097,6 +6022,10 @@ module C #:nodoc:
|
|
6097
6022
|
self # NOTREACHED
|
6098
6023
|
end
|
6099
6024
|
|
6025
|
+
def dup
|
6026
|
+
ArrayType.new(type_table, @base_type.dup, @length)
|
6027
|
+
end
|
6028
|
+
|
6100
6029
|
private
|
6101
6030
|
def create_name(base_type, length)
|
6102
6031
|
"(#{base_type.name})[#{length ? length : ""}]"
|
@@ -6671,6 +6600,11 @@ module C #:nodoc:
|
|
6671
6600
|
def corresponding_unsigned_type
|
6672
6601
|
self # NOTREACHED
|
6673
6602
|
end
|
6603
|
+
|
6604
|
+
def dup
|
6605
|
+
self.class.new(type_table, declarations.first,
|
6606
|
+
@members.map { |memb| memb.dup })
|
6607
|
+
end
|
6674
6608
|
end
|
6675
6609
|
|
6676
6610
|
class Member
|
@@ -6681,6 +6615,10 @@ module C #:nodoc:
|
|
6681
6615
|
|
6682
6616
|
attr_reader :name
|
6683
6617
|
attr_reader :type
|
6618
|
+
|
6619
|
+
def dup
|
6620
|
+
Member.new(@name, @type.dup)
|
6621
|
+
end
|
6684
6622
|
end
|
6685
6623
|
|
6686
6624
|
class StructType < CompositeDataType
|
@@ -6830,6 +6768,7 @@ module C #:nodoc:
|
|
6830
6768
|
def_delegator :@base_type, :parameter_types
|
6831
6769
|
def_delegator :@base_type, :enumerators
|
6832
6770
|
def_delegator :@base_type, :length
|
6771
|
+
def_delegator :@base_type, :length=
|
6833
6772
|
def_delegator :@base_type, :impl_length
|
6834
6773
|
def_delegator :@base_type, :members
|
6835
6774
|
def_delegator :@base_type, :member_named
|
@@ -6892,6 +6831,10 @@ module C #:nodoc:
|
|
6892
6831
|
|
6893
6832
|
def_delegator :@base_type, :corresponding_signed_type
|
6894
6833
|
def_delegator :@base_type, :corresponding_unsigned_type
|
6834
|
+
|
6835
|
+
def dup
|
6836
|
+
UserType.new(type_table, declarations.first, @base_type.dup)
|
6837
|
+
end
|
6895
6838
|
end
|
6896
6839
|
|
6897
6840
|
class UserTypeId < TypeId
|
@@ -7041,6 +6984,10 @@ module C #:nodoc:
|
|
7041
6984
|
|
7042
6985
|
def_delegator :@type, :corresponding_signed_type
|
7043
6986
|
def_delegator :@type, :corresponding_unsigned_type
|
6987
|
+
|
6988
|
+
def dup
|
6989
|
+
ParameterType.new(type_table, @type.dup, @declaration_or_definition)
|
6990
|
+
end
|
7044
6991
|
end
|
7045
6992
|
|
7046
6993
|
class ExtendedBigIntType < IntegerType
|
@@ -7129,6 +7076,10 @@ module C #:nodoc:
|
|
7129
7076
|
def corresponding_unsigned_type
|
7130
7077
|
self
|
7131
7078
|
end
|
7079
|
+
|
7080
|
+
def dup
|
7081
|
+
ExtendedBigIntType.new(type_table)
|
7082
|
+
end
|
7132
7083
|
end
|
7133
7084
|
|
7134
7085
|
class StandardTypeCatalog
|
data/lib/adlint/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 1.18.
|
3
|
+
<title>AdLint 1.18.6 開発者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 1.18.
|
5
|
+
<meta name="description" content="AdLint 1.18.6 開発者ガイド">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 1.18.
|
47
|
+
<h1 class="settitle">AdLint 1.18.6 開発者ガイド</h1>
|
48
48
|
<div class="contents">
|
49
49
|
<h2>Table of Contents</h2>
|
50
50
|
<ul>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="en">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 1.18.
|
3
|
+
<title>AdLint 1.18.6 User's Guide</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 1.18.
|
5
|
+
<meta name="description" content="AdLint 1.18.6 User's Guide">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 1.18.
|
47
|
+
<h1 class="settitle">AdLint 1.18.6 User's Guide</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 1.18.
|
3
|
+
<title>AdLint 1.18.6 利用者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 1.18.
|
5
|
+
<meta name="description" content="AdLint 1.18.6 利用者ガイド">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 1.18.
|
47
|
+
<h1 class="settitle">AdLint 1.18.6 利用者ガイド</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
@@ -28900,7 +28900,7 @@ Up: <a rel="up" accesskey="u" href="#Messages">Messages</a>
|
|
28900
28900
|
<h4 class="subsection">6.482.2 内容</h4>
|
28901
28901
|
|
28902
28902
|
<p>ローカルで <code>static</code> な変数のアドレスが、結合またはより広いスコープを持つポインタに代入されています。
|
28903
|
-
|
28903
|
+
静的記憶域期間を持つため、危険ではありませんが、データ隠蔽の原則に反します。
|
28904
28904
|
|
28905
28905
|
<h4 class="subsection">6.482.3 サンプルコード</h4>
|
28906
28906
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
@setfilename users_guide_ja.info
|
3
3
|
@documentlanguage ja
|
4
4
|
@documentencoding utf-8
|
5
|
-
@settitle AdLint 1.18.
|
5
|
+
@settitle AdLint 1.18.6 利用者ガイド
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -25040,7 +25040,7 @@ void func(int a)
|
|
25040
25040
|
@subsection 内容
|
25041
25041
|
|
25042
25042
|
ローカルで @code{static} な変数のアドレスが、結合またはより広いスコープを持つポインタに代入されています。
|
25043
|
-
|
25043
|
+
静的記憶域期間を持つため、危険ではありませんが、データ隠蔽の原則に反します。
|
25044
25044
|
|
25045
25045
|
@subsection サンプルコード
|
25046
25046
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adlint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.18.
|
4
|
+
version: 1.18.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'AdLint is a source code static analyzer.
|
15
15
|
|