Support for Clang.
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
index 602cb56..d100399 100644
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -1248,7 +1248,7 @@
my $MAX_CPPFILT_FILE_SIZE = 50000;
my $CPPFILT_SUPPORT_FILE;
-my (%WORD_SIZE, %CPU_ARCH, %GCC_VERSION);
+my (%WORD_SIZE, %CPU_ARCH, %GCC_VERSION, %CLANG_VERSION);
my $STDCXX_TESTING = 0;
my $GLIBC_TESTING = 0;
@@ -15963,6 +15963,7 @@
my ($Arch1, $Arch2) = (getArch(1), getArch(2));
my ($GccV1, $GccV2) = (getGccVersion(1), getGccVersion(2));
+ my ($ClangV1, $ClangV2) = ($CLANG_VERSION{1}, $CLANG_VERSION{2});
my ($TestInfo, $TestResults, $Problem_Summary) = ();
@@ -15973,13 +15974,23 @@
$TestInfo .= " <version1>\n";
$TestInfo .= " <number>".$Descriptor{1}{"Version"}."</number>\n";
$TestInfo .= " <arch>$Arch1</arch>\n";
- $TestInfo .= " <gcc>$GccV1</gcc>\n";
+ if($GccV1) {
+ $TestInfo .= " <gcc>$GccV1</gcc>\n";
+ }
+ elsif($ClangV1) {
+ $TestInfo .= " <clang>$ClangV1</clang>\n";
+ }
$TestInfo .= " </version1>\n";
$TestInfo .= " <version2>\n";
$TestInfo .= " <number>".$Descriptor{2}{"Version"}."</number>\n";
$TestInfo .= " <arch>$Arch2</arch>\n";
- $TestInfo .= " <gcc>$GccV2</gcc>\n";
+ if($GccV2) {
+ $TestInfo .= " <gcc>$GccV2</gcc>\n";
+ }
+ elsif($ClangV2) {
+ $TestInfo .= " <clang>$ClangV2</clang>\n";
+ }
$TestInfo .= " </version2>\n";
$TestInfo = "<test_info>\n".$TestInfo."</test_info>\n\n";
@@ -16077,17 +16088,42 @@
}
}
if($Level eq "Binary"
- and $GccV1 ne "unknown"
- and $GccV2 ne "unknown"
and $OStarget ne "windows")
- { # GCC version
- if($GccV1 eq $GccV2)
- { # go to the separate section
- $AddTestInfo .= "<tr><th>GCC Version</th><td>$GccV1</td></tr>\n";
+ {
+ if($GccV1 ne "unknown"
+ and $GccV2 ne "unknown")
+ { # GCC version
+ if($GccV1 eq $GccV2)
+ { # go to the separate section
+ $AddTestInfo .= "<tr><th>GCC Version</th><td>$GccV1</td></tr>\n";
+ }
+ else
+ { # go to the version number
+ push(@VInf1, "gcc ".$GccV1);
+ push(@VInf2, "gcc ".$GccV2);
+ }
}
- else
- { # go to the version number
+ elsif($ClangV1
+ and $ClangV2)
+ { # Clang version
+ if($ClangV1 eq $ClangV2)
+ { # go to the separate section
+ $AddTestInfo .= "<tr><th>Clang Version</th><td>$ClangV1</td></tr>\n";
+ }
+ else
+ { # go to the version number
+ push(@VInf1, "clang ".$ClangV1);
+ push(@VInf2, "clang ".$ClangV2);
+ }
+ }
+ elsif($GccV1 ne "unknown" and $ClangV2)
+ {
push(@VInf1, "gcc ".$GccV1);
+ push(@VInf2, "clang ".$ClangV2);
+ }
+ elsif($ClangV1 and $GccV2 ne "unknown")
+ {
+ push(@VInf1, "clang ".$ClangV1);
push(@VInf2, "gcc ".$GccV2);
}
}
@@ -20756,6 +20792,9 @@
if($ABI->{"GccVersion"}) {
$GCC_VERSION{$LibVersion} = $ABI->{"GccVersion"};
}
+ elsif($ABI->{"ClangVersion"}) {
+ $CLANG_VERSION{$LibVersion} = $ABI->{"ClangVersion"};
+ }
}
sub read_Libs_DumpInfo($$)
@@ -22252,6 +22291,14 @@
$Descriptor{1}{"Version"} = $TargetVersion{1}?$TargetVersion{1}:$ABIdump->{"LibraryVersion"};
$Descriptor{2}{"Version"} = $TargetVersion{2}?$TargetVersion{2}:$ABIdump->{"LibraryVersion"};
+ if(not defined $Descriptor{1}{"Version"}) {
+ $Descriptor{1}{"Version"} = "X";
+ }
+
+ if(not defined $Descriptor{2}{"Version"}) {
+ $Descriptor{2}{"Version"} = "Y";
+ }
+
if(defined $ABIdump->{"ABI_DUMPER_VERSION"})
{
$UsedDump{1}{"DWARF"} = 1;