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