adlint 1.18.2 → 1.18.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|