aboutsummaryrefslogtreecommitdiff
path: root/abi-compliance-checker.pl
diff options
context:
space:
mode:
authorAndrey Ponomarenko <andrewponomarenko@yandex.ru>2015-12-11 23:40:03 +0300
committerAndrey Ponomarenko <andrewponomarenko@yandex.ru>2015-12-11 23:40:03 +0300
commit86b503bd85e3a0e8b32616d5af67c7d176a6263e (patch)
tree231498f19d4e74ee3dbf105b9c3ac8b506d091b5 /abi-compliance-checker.pl
parentdfd124548b3439a0a40764128a7f6506f68ab4ee (diff)
downloadabi-compliance-checker-86b503bd85e3a0e8b32616d5af67c7d176a6263e.tar.gz
Fixed false positives in the report if input ABI dumps contain __unknown__ types.
Diffstat (limited to 'abi-compliance-checker.pl')
-rw-r--r--abi-compliance-checker.pl33
1 files changed, 32 insertions, 1 deletions
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
index e9a1c2b..6366088 100644
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -11406,7 +11406,7 @@ sub mergeTypes($$$)
my ($Type1_Id, $Type2_Id, $Level) = @_;
return {} if(not $Type1_Id or not $Type2_Id);
- if($Cache{"mergeTypes"}{$Level}{$Type1_Id}{$Type2_Id})
+ if(defined $Cache{"mergeTypes"}{$Level}{$Type1_Id}{$Type2_Id})
{ # already merged
return $Cache{"mergeTypes"}{$Level}{$Type1_Id}{$Type2_Id};
}
@@ -11423,6 +11423,15 @@ sub mergeTypes($$$)
$CheckedTypes{$Level}{$Type1_Pure{"Name"}} = 1;
+ if(defined $UsedDump{1}{"DWARF"})
+ {
+ if($Type1_Pure{"Name"} eq "__unknown__"
+ or $Type2_Pure{"Name"} eq "__unknown__")
+ { # Error ABI dump
+ return ($Cache{"mergeTypes"}{$Level}{$Type1_Id}{$Type2_Id} = {});
+ }
+ }
+
my %SubProblems = ();
if($Type1_Pure{"Name"} eq $Type2_Pure{"Name"})
@@ -11535,6 +11544,16 @@ sub mergeTypes($$$)
}
my %Base1_Pure = get_PureType($Base_1{"Tid"}, $TypeInfo{1});
my %Base2_Pure = get_PureType($Base_2{"Tid"}, $TypeInfo{2});
+
+ if(defined $UsedDump{1}{"DWARF"})
+ {
+ if($Base1_Pure{"Name"}=~/\b__unknown__\b/
+ or $Base2_Pure{"Name"}=~/\b__unknown__\b/)
+ { # Error ABI dump
+ return ($Cache{"mergeTypes"}{$Level}{$Type1_Id}{$Type2_Id} = {});
+ }
+ }
+
if(tNameLock($Base_1{"Tid"}, $Base_2{"Tid"}))
{
if(diffTypes($Base1_Pure{"Tid"}, $Base2_Pure{"Tid"}, $Level))
@@ -14600,9 +14619,21 @@ sub detectTypeChange($$$$)
my %Type2 = get_Type($Type2_Id, 2);
my %Type1_Pure = get_PureType($Type1_Id, $TypeInfo{1});
my %Type2_Pure = get_PureType($Type2_Id, $TypeInfo{2});
+
my %Type1_Base = ($Type1_Pure{"Type"} eq "Array")?get_OneStep_BaseType($Type1_Pure{"Tid"}, $TypeInfo{1}):get_BaseType($Type1_Id, 1);
my %Type2_Base = ($Type2_Pure{"Type"} eq "Array")?get_OneStep_BaseType($Type2_Pure{"Tid"}, $TypeInfo{2}):get_BaseType($Type2_Id, 2);
+ if(defined $UsedDump{1}{"DWARF"})
+ {
+ if($Type1_Pure{"Name"} eq "__unknown__"
+ or $Type2_Pure{"Name"} eq "__unknown__"
+ or $Type1_Base{"Name"} eq "__unknown__"
+ or $Type2_Base{"Name"} eq "__unknown__")
+ { # Error ABI dump
+ return ();
+ }
+ }
+
my $Type1_PLevel = get_PLevel($Type1_Id, 1);
my $Type2_PLevel = get_PLevel($Type2_Id, 2);
return () if(not $Type1{"Name"} or not $Type2{"Name"});