blob: 9510332db6341aa9446f68fb96d5c1d727c958c2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#!/bin/sh
set -eu
base="${TMPDIR-/tmp}/mcpu-cpp-diagnostics-$$"
mkdir -p "$base"
trap 'rm -rf "$base"' EXIT HUP INT TERM
cat > "$base/warning.c" <<'EOT'
#define MESSAGE expanded_message
before
#warning MESSAGE is not expanded
#warning one /* removed comment */ two
#warning "spaces inside string"
#warning Привет мир
#if 0
#warning hidden warning
#error hidden error
#endif
after
EOT
"$MCPU_CPP" --no-config "$base/warning.c" -o "$base/warning.out" 2>"$base/warning.err"
grep '^before$' "$base/warning.out" >/dev/null
grep '^after$' "$base/warning.out" >/dev/null
! grep '#warning' "$base/warning.out" >/dev/null
grep 'warning: #warning MESSAGE is not expanded$' "$base/warning.err" >/dev/null
grep 'warning: #warning one two$' "$base/warning.err" >/dev/null
grep 'warning: #warning "spaces inside string"$' "$base/warning.err" >/dev/null
grep 'warning: #warning Привет мир$' "$base/warning.err" >/dev/null
! grep 'expanded_message' "$base/warning.err" >/dev/null
! grep 'hidden warning' "$base/warning.err" >/dev/null
! grep 'hidden error' "$base/warning.err" >/dev/null
"$MCPU_CPP" --no-config -dD "$base/warning.c" -o "$base/warning-dd.out" 2>"$base/warning-dd.err"
grep '^#define MESSAGE expanded_message$' "$base/warning-dd.out" >/dev/null
! grep '#warning' "$base/warning-dd.out" >/dev/null
grep 'warning: #warning MESSAGE is not expanded$' "$base/warning-dd.err" >/dev/null
cat > "$base/line.c" <<'EOT'
#line 62 "generated.mc"
#warning logical location
ok
EOT
"$MCPU_CPP" --no-config "$base/line.c" -o "$base/line.out" 2>"$base/line.err"
grep '^generated\.mc:62: warning: #warning logical location$' "$base/line.err" >/dev/null
grep '^ok$' "$base/line.out" >/dev/null
cat > "$base/error.c" <<'EOT'
#define WHY replacement
#error WHY failed
never
EOT
if "$MCPU_CPP" --no-config "$base/error.c" -o "$base/error.out" 2>"$base/error.err"; then
echo '#error did not stop preprocessing' >&2
exit 1
fi
grep 'error: #error WHY failed$' "$base/error.err" >/dev/null
! grep 'replacement' "$base/error.err" >/dev/null
cat > "$base/empty.c" <<'EOT'
#warning
ok
EOT
"$MCPU_CPP" --no-config "$base/empty.c" -o "$base/empty.out" 2>"$base/empty.err"
grep 'warning: #warning$' "$base/empty.err" >/dev/null
grep '^ok$' "$base/empty.out" >/dev/null
|