]>
Commit | Line | Data |
---|---|---|
a5544970 | 1 | # Copyright (C) 2003-2019 Free Software Foundation, Inc. |
ac871ee1 MM |
2 | |
3 | # This program is free software; you can redistribute it and/or modify | |
4 | # it under the terms of the GNU General Public License as published by | |
cd976c16 | 5 | # the Free Software Foundation; either version 3 of the License, or |
ac871ee1 MM |
6 | # (at your option) any later version. |
7 | # | |
8 | # This program is distributed in the hope that it will be useful, | |
9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | # GNU General Public License for more details. | |
12 | # | |
13 | # You should have received a copy of the GNU General Public License | |
cd976c16 NC |
14 | # along with GCC; see the file COPYING3. If not see |
15 | # <http://www.gnu.org/licenses/>. | |
ac871ee1 | 16 | |
ccfc7360 L |
17 | load_lib copy-file.exp |
18 | ||
f6007d99 JJ |
19 | proc pch-init { args } { |
20 | global pch_unsupported_debug pch_unsupported | |
21 | ||
22 | if [info exists pch_unsupported_debug] { | |
23 | error "pch-init: pch_unsupported_debug is not empty as expected" | |
24 | } | |
25 | if [info exists pch_unsupported] { | |
26 | error "pch-init: pch_unsupported is not empty as expected" | |
27 | } | |
28 | ||
29 | set result [check_compile pchtest object "int i;" "-g -x c-header"] | |
30 | set pch_unsupported_debug \ | |
31 | [regexp "debug format cannot be used with pre-compiled headers" \ | |
32 | [lindex $result 0]] | |
b5cdc3eb | 33 | remote_file build delete [lindex $result 1] |
f6007d99 JJ |
34 | |
35 | set pch_unsupported 0 | |
36 | if { $pch_unsupported_debug } { | |
37 | verbose -log "pch is unsupported with the debug info format" | |
38 | ||
39 | set result [check_compile pchtest object "int i;" "-x c-header"] | |
b5cdc3eb TV |
40 | set pch_unsupported \ |
41 | [regexp "debug format cannot be used with pre-compiled headers" \ | |
42 | [lindex $result 0]] | |
43 | remote_file build delete [lindex $result 1] | |
f6007d99 JJ |
44 | } |
45 | } | |
46 | ||
47 | proc pch-finish { args } { | |
48 | global pch_unsupported_debug pch_unsupported | |
49 | unset pch_unsupported_debug | |
50 | unset pch_unsupported | |
51 | } | |
52 | ||
53 | proc check_effective_target_pch_supported_debug { } { | |
54 | global pch_unsupported_debug | |
55 | if { $pch_unsupported_debug } { | |
56 | return 0 | |
57 | } | |
58 | return 1 | |
59 | } | |
60 | ||
504d14c9 | 61 | proc dg-flags-pch { subdir test otherflags options suffix } { |
ac871ee1 | 62 | global runtests dg-do-what-default |
f6007d99 | 63 | global pch_unsupported_debug pch_unsupported |
ac871ee1 MM |
64 | |
65 | # If we're only testing specific files and this isn't one of them, skip it. | |
66 | if ![runtest_file_p $runtests $test] { | |
ccc01444 | 67 | return |
ac871ee1 | 68 | } |
8c775844 DE |
69 | |
70 | if { [istarget "powerpc-ibm-aix*"] } { | |
71 | set torture_execute_xfail "powerpc-ibm-aix*" | |
72 | return | |
73 | } | |
74 | ||
ac871ee1 MM |
75 | set nshort "$subdir/[file tail $test]" |
76 | set bname "[file rootname [file tail $nshort]]" | |
77 | ||
485b51a7 MM |
78 | catch { file_on_host delete "$bname$suffix.gch" } |
79 | catch { file_on_host delete "$bname.s" } | |
80 | catch { file_on_host delete "$bname.s-gch" } | |
ac871ee1 MM |
81 | |
82 | # We don't try to use the loop-optimizing options, since they are highly | |
83 | # unlikely to make any difference to PCH. | |
84 | foreach flags $options { | |
504d14c9 | 85 | verbose "Testing $nshort, $otherflags $flags" 1 |
ac871ee1 | 86 | |
f6007d99 JJ |
87 | if { $pch_unsupported != 0 \ |
88 | || ( $pch_unsupported_debug != 0 && [regexp " -g" " $flags"] ) } { | |
89 | verbose -log "$nshort unsupported because debug format conflicts with PCH" | |
90 | unsupported "$nshort $flags" | |
91 | continue | |
92 | } | |
93 | ||
ac871ee1 MM |
94 | # For the header files, the default is to precompile. |
95 | set dg-do-what-default precompile | |
485b51a7 | 96 | catch { file_on_host delete "$bname$suffix" } |
ccfc7360 | 97 | gcc_copy_files "[file rootname $test]${suffix}s" "$bname$suffix" |
504d14c9 | 98 | dg-test -keep-output "./$bname$suffix" "$otherflags $flags" "" |
ac871ee1 MM |
99 | |
100 | # For the rest, the default is to compile to .s. | |
101 | set dg-do-what-default compile | |
102 | ||
765f7c95 NS |
103 | set have_errs [llength [grep $test "{\[ \t\]\+dg-error\[ \t\]\+.*\[ \t\]\+}"]] |
104 | ||
485b51a7 | 105 | if { [ file_on_host exists "$bname$suffix.gch" ] } { |
ac871ee1 | 106 | # Ensure that the PCH file is used, not the original header. |
485b51a7 | 107 | file_on_host delete "$bname$suffix" |
ac871ee1 | 108 | |
8564f927 JJ |
109 | # The flags "-Dwith_PCH" and "-Dwithout_PCH" are to distinguish the |
110 | # two compiles in test summary lines. | |
111 | dg-test -keep-output $test "$otherflags $flags -I. -Dwith_PCH" "" | |
485b51a7 | 112 | file_on_host delete "$bname$suffix.gch" |
765f7c95 NS |
113 | if { !$have_errs } { |
114 | if { [ file_on_host exists "$bname.s" ] } { | |
115 | remote_upload host "$bname.s" "$bname.s-gch" | |
116 | remote_download host "$bname.s-gch" | |
117 | gcc_copy_files "[file rootname $test]${suffix}s" "$bname$suffix" | |
8564f927 | 118 | dg-test -keep-output $test "$otherflags $flags -I. -Dwithout_PCH" "" |
765f7c95 NS |
119 | remote_upload host "$bname.s" |
120 | set tmp [ diff "$bname.s" "$bname.s-gch" ] | |
121 | if { $tmp == 0 } { | |
122 | verbose -log "assembly file '$bname.s', '$bname.s-gch' comparison error" | |
504d14c9 | 123 | fail "$nshort $otherflags $flags assembly comparison" |
765f7c95 | 124 | } elseif { $tmp == 1 } { |
504d14c9 | 125 | pass "$nshort $otherflags $flags assembly comparison" |
765f7c95 | 126 | } else { |
504d14c9 | 127 | fail "$nshort $otherflags $flags assembly comparison" |
765f7c95 NS |
128 | } |
129 | file_on_host delete "$bname$suffix" | |
130 | file_on_host delete "$bname.s" | |
131 | file_on_host delete "$bname.s-gch" | |
ac871ee1 | 132 | } else { |
765f7c95 NS |
133 | verbose -log "assembly file '$bname.s' missing" |
134 | fail "$nshort $flags assembly comparison" | |
ac871ee1 | 135 | } |
6c9d8751 | 136 | } |
f6007d99 JJ |
137 | } elseif { $pch_unsupported_debug == 0 \ |
138 | || [llength [grep $test "{\[ \t\]\+dg-require-effective-target\[ \t\]\+pch_supported_debug\[ \t\]\+.*\[ \t\]\+}"]] > 0 } { | |
6c9d8751 NS |
139 | verbose -log "pch file '$bname$suffix.gch' missing" |
140 | fail "$nshort $flags" | |
141 | if { !$have_errs } { | |
142 | verbose -log "assembly file '$bname.s' missing" 1 | |
143 | fail "$nshort $flags assembly comparison" | |
ac871ee1 | 144 | } |
ac871ee1 MM |
145 | } |
146 | } | |
147 | } | |
504d14c9 IS |
148 | |
149 | proc dg-pch { subdir test options suffix } { | |
150 | return [dg-flags-pch $subdir $test "" $options $suffix] | |
8564f927 | 151 | } |