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