diff --git a/clang/utils/analyzer/update_plist_test.pl b/clang/utils/analyzer/update_plist_test.pl new file mode 100755 index 000000000000..abb74a57c3c1 --- /dev/null +++ b/clang/utils/analyzer/update_plist_test.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl -w +use strict; +require File::Temp; +use File::Temp (); + +die "update_plist_test \n" if ($#ARGV < 1); +my $testFile = shift @ARGV; +die "error: cannot read file $testFile\n" if (! -r $testFile); +my $plistFile = shift @ARGV; +die "error: cannot read file $plistFile\n" if (! -r $plistFile); + +# Create a temp file for the new test. +my $fh = File::Temp->new(); +my $filename = $fh->filename; +$fh->unlink_on_destroy(1); + +# Copy the existing temp file, skipping the FileCheck comments. +open (IN, $testFile) or die "cannot open $testFile\n"; +while () { + next if (/^\/\/ CHECK/); + print $fh $_; +} +close(IN); + +# Copy the plist data, and specially format it. +open (IN, $plistFile) or die "cannot open $plistFile\n"; +my $firstArray = 1; +my $first = 1; +while () { + # Skip everything not indented. + next if (/^[^\s]/); + # Skip the first array entry, which is for files. + if ($firstArray) { + if (/<\/array>/) { $firstArray = 0; } + next; + } + # Format the CHECK lines. + if ($first) { + print $fh "// CHECK: "; + $first = 0; + } + else { + print $fh "// CHECK-NEXT: "; + } + print $fh $_; +} +close (IN); +close ($fh); + +`cp $filename $testFile`; +print "updated $testFile\n";