1#!/usr/bin/perl -w 2 3# This tiny little script, which should be run from the clang 4# directory (with clang in your patch), tries to take each 5# compilable Clang test and build a PCH file from that test, then read 6# and dump the contents of the PCH file just created. 7use POSIX; 8 9$exitcode = 0; 10sub testfiles($$) { 11 my $suffix = shift; 12 my $language = shift; 13 my $passed = 0; 14 my $failed = 0; 15 my $skipped = 0; 16 17 @files = `ls test/*/*.$suffix`; 18 foreach $file (@files) { 19 chomp($file); 20 my $code = system("clang -fsyntax-only -x $language $file > /dev/null 2>&1"); 21 if ($code == 0) { 22 print("."); 23 $code = system("clang -cc1 -emit-pch -x $language -o $file.pch $file > /dev/null 2>&1"); 24 if ($code == 0) { 25 $code = system("clang -cc1 -include-pch $file.pch -x $language -ast-dump /dev/null > /dev/null 2>&1"); 26 if ($code == 0) { 27 $passed++; 28 } elsif (($code & 0xFF) == SIGINT) { 29 exit($exitcode); 30 } else { 31 print("\n---Failed to dump AST file for \"$file\"---\n"); 32 $exitcode = 1; 33 $failed++; 34 } 35 unlink "$file.pch"; 36 } elsif (($code & 0xFF) == SIGINT) { 37 exit($exitcode); 38 } else { 39 print("\n---Failed to build PCH file for \"$file\"---\n"); 40 $exitcode = 1; 41 $failed++; 42 } 43 } elsif (($code & 0xFF) == SIGINT) { 44 exit($exitcode); 45 } else { 46 print("x"); 47 $skipped++; 48 } 49 } 50 51 print("\n\n$passed tests passed\n"); 52 print("$failed tests failed\n"); 53 print("$skipped tests skipped ('x')\n") 54} 55 56printf("-----Testing precompiled headers for C-----\n"); 57testfiles("c", "c"); 58printf("\n-----Testing precompiled headers for Objective-C-----\n"); 59testfiles("m", "objective-c"); 60print("\n"); 61exit($exitcode); 62