aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/lib/dg-pch.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/lib/dg-pch.exp')
-rw-r--r--gcc-4.9/gcc/testsuite/lib/dg-pch.exp149
1 files changed, 149 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/lib/dg-pch.exp b/gcc-4.9/gcc/testsuite/lib/dg-pch.exp
new file mode 100644
index 000000000..7efbdb50e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/lib/dg-pch.exp
@@ -0,0 +1,149 @@
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+load_lib copy-file.exp
+
+proc pch-init { args } {
+ global pch_unsupported_debug pch_unsupported
+
+ if [info exists pch_unsupported_debug] {
+ error "pch-init: pch_unsupported_debug is not empty as expected"
+ }
+ if [info exists pch_unsupported] {
+ error "pch-init: pch_unsupported is not empty as expected"
+ }
+
+ set result [check_compile pchtest object "int i;" "-g -x c-header"]
+ set pch_unsupported_debug \
+ [regexp "debug format cannot be used with pre-compiled headers" \
+ [lindex $result 0]]
+
+ set pch_unsupported 0
+ if { $pch_unsupported_debug } {
+ verbose -log "pch is unsupported with the debug info format"
+
+ set result [check_compile pchtest object "int i;" "-x c-header"]
+ set pch_unsupported \
+ [regexp "debug format cannot be used with pre-compiled headers" \
+ [lindex $result 0]]
+ }
+}
+
+proc pch-finish { args } {
+ global pch_unsupported_debug pch_unsupported
+ unset pch_unsupported_debug
+ unset pch_unsupported
+}
+
+proc check_effective_target_pch_supported_debug { } {
+ global pch_unsupported_debug
+ if { $pch_unsupported_debug } {
+ return 0
+ }
+ return 1
+}
+
+proc dg-flags-pch { subdir test otherflags options suffix } {
+ global runtests dg-do-what-default
+ global pch_unsupported_debug pch_unsupported
+
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $test] {
+ return
+ }
+
+ if { [istarget "powerpc-ibm-aix*"] } {
+ set torture_execute_xfail "powerpc-ibm-aix*"
+ return
+ }
+
+ set nshort "$subdir/[file tail $test]"
+ set bname "[file rootname [file tail $nshort]]"
+
+ catch { file_on_host delete "$bname$suffix.gch" }
+ catch { file_on_host delete "$bname.s" }
+ catch { file_on_host delete "$bname.s-gch" }
+
+ # We don't try to use the loop-optimizing options, since they are highly
+ # unlikely to make any difference to PCH.
+ foreach flags $options {
+ verbose "Testing $nshort, $otherflags $flags" 1
+
+ if { $pch_unsupported != 0 \
+ || ( $pch_unsupported_debug != 0 && [regexp " -g" " $flags"] ) } {
+ verbose -log "$nshort unsupported because debug format conflicts with PCH"
+ unsupported "$nshort $flags"
+ continue
+ }
+
+ # For the header files, the default is to precompile.
+ set dg-do-what-default precompile
+ catch { file_on_host delete "$bname$suffix" }
+ gcc_copy_files "[file rootname $test]${suffix}s" "$bname$suffix"
+ dg-test -keep-output "./$bname$suffix" "$otherflags $flags" ""
+
+ # For the rest, the default is to compile to .s.
+ set dg-do-what-default compile
+
+ set have_errs [llength [grep $test "{\[ \t\]\+dg-error\[ \t\]\+.*\[ \t\]\+}"]]
+
+ if { [ file_on_host exists "$bname$suffix.gch" ] } {
+ # Ensure that the PCH file is used, not the original header.
+ file_on_host delete "$bname$suffix"
+
+ # The flags "-Dwith_PCH" and "-Dwithout_PCH" are to distinguish the
+ # two compiles in test summary lines.
+ dg-test -keep-output $test "$otherflags $flags -I. -Dwith_PCH" ""
+ file_on_host delete "$bname$suffix.gch"
+ if { !$have_errs } {
+ if { [ file_on_host exists "$bname.s" ] } {
+ remote_upload host "$bname.s" "$bname.s-gch"
+ remote_download host "$bname.s-gch"
+ gcc_copy_files "[file rootname $test]${suffix}s" "$bname$suffix"
+ dg-test -keep-output $test "$otherflags $flags -I. -Dwithout_PCH" ""
+ remote_upload host "$bname.s"
+ set tmp [ diff "$bname.s" "$bname.s-gch" ]
+ if { $tmp == 0 } {
+ verbose -log "assembly file '$bname.s', '$bname.s-gch' comparison error"
+ fail "$nshort $otherflags $flags assembly comparison"
+ } elseif { $tmp == 1 } {
+ pass "$nshort $otherflags $flags assembly comparison"
+ } else {
+ fail "$nshort $otherflags $flags assembly comparison"
+ }
+ file_on_host delete "$bname$suffix"
+ file_on_host delete "$bname.s"
+ file_on_host delete "$bname.s-gch"
+ } else {
+ verbose -log "assembly file '$bname.s' missing"
+ fail "$nshort $flags assembly comparison"
+ }
+ }
+ } elseif { $pch_unsupported_debug == 0 \
+ || [llength [grep $test "{\[ \t\]\+dg-require-effective-target\[ \t\]\+pch_supported_debug\[ \t\]\+.*\[ \t\]\+}"]] > 0 } {
+ verbose -log "pch file '$bname$suffix.gch' missing"
+ fail "$nshort $flags"
+ if { !$have_errs } {
+ verbose -log "assembly file '$bname.s' missing" 1
+ fail "$nshort $flags assembly comparison"
+ }
+ }
+ }
+}
+
+proc dg-pch { subdir test options suffix } {
+ return [dg-flags-pch $subdir $test "" $options $suffix]
+}