1#!/usr/bin/env bash
2
3# This script is intended as a FileCheck replacement to update the test
4# expectations in a -ast-dump test.
5#
6# Usage (to generate normal AST dump tests):
7#
8# $ lit -DFileCheck=$PWD/utils/make-ast-dump-check.sh test/AST/ast-dump-openmp-*
9#
10# Usage (to generate serialization AST dump tests):
11#
12# $ lit -DFileCheck="generate_serialization_test=1 $PWD/utils/make-ast-dump-check.sh"
13#     test/AST/ast-dump-openmp-*
14
15prefix=CHECK
16
17if [ -z ${generate_serialization_test+x} ];
18  then generate_serialization_test=0;
19fi
20
21while [[ "$#" -ne 0 ]]; do
22  case "$1" in
23  --check-prefix)
24    shift
25    prefix="$1"
26    ;;
27  --implicit-check-not)
28    shift
29    ;;
30  -*)
31    ;;
32  *)
33    file="$1"
34    ;;
35  esac
36  shift
37done
38
39testdir="$(dirname "$file")"
40
41read -r -d '' script <<REWRITE
42BEGIN {
43  skipping_builtins = 0
44  matched_last_line = 0
45}
46
47/^[\`|].* line:/ {
48  skipping_builtins = 0
49}
50
51/^[\`|].* col:/ {
52  skipping_builtins = 0
53}
54
55{
56  if (skipping_builtins == 1) {
57    matched_last_line = 0
58    next
59  }
60}
61
62/TranslationUnitDecl/ {
63  skipping_builtins = 1
64}
65
66{
67  s = \$0
68  gsub("0x[0-9a-fA-F]+", "{{.*}}", s)
69  gsub("$testdir/", "{{.*}}", s)
70  if ($generate_serialization_test == 1) {
71    gsub(" imported", "{{( imported)?}}", s)
72    gsub(" <undeserialized declarations>", "{{( <undeserialized declarations>)?}}", s)
73    gsub("line:[0-9]+:[0-9]+", "line:{{.*}}", s)
74    gsub("line:[0-9]+", "line:{{.*}}", s)
75    gsub("col:[0-9]+", "col:{{.*}}", s)
76    gsub(":[0-9]+:[0-9]+", "{{.*}}", s)
77  }
78}
79
80matched_last_line == 0 {
81  print "// ${prefix}:" s
82}
83
84matched_last_line == 1 {
85  print "// ${prefix}-NEXT:" s
86}
87
88{
89  matched_last_line = 1
90}
91REWRITE
92
93echo "$script"
94
95{
96  cat "$file" | grep -v "$prefix"
97  awk "$script"
98} > "$file.new"
99
100mv "$file.new" "$file"
101