| #!/usr/bin/perl -w | 
 |  | 
 | # This tiny little script, which should be run from the clang | 
 | # directory (with clang in your patch), tries to take each | 
 | # compilable Clang test and build a PCH file from that test, then read | 
 | # and dump the contents of the PCH file just created. | 
 | use POSIX; | 
 |  | 
 | $exitcode = 0; | 
 | sub testfiles($$) { | 
 |   my $suffix = shift; | 
 |   my $language = shift; | 
 |   my $passed = 0; | 
 |   my $failed = 0; | 
 |   my $skipped = 0; | 
 |  | 
 |   @files = `ls test/*/*.$suffix`; | 
 |   foreach $file (@files) { | 
 |     chomp($file); | 
 |     my $code = system("clang -fsyntax-only -x $language $file > /dev/null 2>&1"); | 
 |     if ($code == 0) { | 
 |       print("."); | 
 |       $code = system("clang -cc1 -emit-pch -x $language -o $file.pch $file > /dev/null 2>&1"); | 
 |       if ($code == 0) { | 
 |         $code = system("clang -cc1 -include-pch $file.pch -x $language -ast-dump /dev/null > /dev/null 2>&1"); | 
 |         if ($code == 0) { | 
 |           $passed++; | 
 |         } elsif (($code & 0xFF) == SIGINT) { | 
 |           exit($exitcode); | 
 |         } else { | 
 |           print("\n---Failed to dump AST file for \"$file\"---\n"); | 
 |           $exitcode = 1; | 
 |           $failed++; | 
 |         } | 
 |         unlink "$file.pch"; | 
 |       } elsif (($code & 0xFF) == SIGINT) { | 
 |         exit($exitcode); | 
 |       } else { | 
 |         print("\n---Failed to build PCH file for \"$file\"---\n"); | 
 |         $exitcode = 1; | 
 |           $failed++; | 
 |       } | 
 |     } elsif (($code & 0xFF) == SIGINT) { | 
 |       exit($exitcode); | 
 |     } else { | 
 |       print("x"); | 
 |       $skipped++; | 
 |     } | 
 |   } | 
 |  | 
 |   print("\n\n$passed tests passed\n"); | 
 |   print("$failed tests failed\n"); | 
 |   print("$skipped tests skipped ('x')\n") | 
 | } | 
 |  | 
 | printf("-----Testing precompiled headers for C-----\n"); | 
 | testfiles("c", "c"); | 
 | printf("\n-----Testing precompiled headers for Objective-C-----\n"); | 
 | testfiles("m", "objective-c"); | 
 | print("\n"); | 
 | exit($exitcode); |