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