xref: /aosp_15_r20/external/clang/utils/TestUtils/pch-test.pl (revision 67e74705e28f6214e480b399dd47ea732279e315)
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