]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.target/x86_64/abi/ms-sysv/ms-sysv.exp
Update copyright years.
[thirdparty/gcc.git] / gcc / testsuite / gcc.target / x86_64 / abi / ms-sysv / ms-sysv.exp
CommitLineData
d6d4d770 1# Tests for ms_abi to sysv_abi calls.
99dee823 2# Copyright (C) 2016-2021 Free Software Foundation, Inc.
d6d4d770
DS
3# Contributed by Daniel Santos <daniel.santos@pobox.com>
4#
5# This file is part of GCC.
6#
7# GCC is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 3, or (at your option)
10# any later version.
11#
12# GCC is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# Under Section 7 of GPL version 3, you are granted additional
18# permissions described in the GCC Runtime Library Exception, version
19# 3.1, as published by the Free Software Foundation.
20#
21# You should have received a copy of the GNU General Public License and
22# a copy of the GCC Runtime Library Exception along with this program;
23# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24# <http://www.gnu.org/licenses/>.
25
bcce980e
TV
26load_lib gcc-dg.exp
27
28proc host_supports_c++11 {} {
29 global HOSTCXX HOSTCXXFLAGS
30
31 set pidstr [pid]
32 set src "host_supports_c++11_$pidstr.C"
33 set asm "host_supports_c++11_$pidstr.s"
34
35 set f [open $src "w"]
36 puts $f ""
37 close $f
38
39 set cxx "$HOSTCXX $HOSTCXXFLAGS"
40
41 # Temporarily switch to the environment for the host compiler.
42 restore_ld_library_path_env_vars
43 set status [remote_exec host "$cxx -S $src -std=c++11 -o $asm"]
44 # And switch back.
45 set_ld_library_path_env_vars
46
47 file delete $src $asm
48
49 set status [lindex $status 0]
50 if { $status != 0 } {
51 return 0
52 }
53
54 return 1
55}
56
d6d4d770
DS
57# Exit immediately if this isn't a native x86_64 target.
58if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
52d0f7bd
DS
59 || ![is-effective-target lp64] || ![isnative]
60 || ![host_supports_c++11] } then {
61
62 # Gate "unsupported" message return value of first runtest_file_p call.
63 if [runtest_file_p $runtests "$srcdir/$subdir/ms-sysv.c"] {
64 unsupported "$subdir"
65 }
d6d4d770
DS
66 return
67}
68
d6d4d770
DS
69proc runtest_ms_sysv { cflags generator_args } {
70 global GCC_UNDER_TEST HOSTCXX HOSTCXXFLAGS tmpdir srcdir subdir \
52d0f7bd 71 TEST_ALWAYS_FLAGS runtests
d6d4d770
DS
72
73 set objdir "$tmpdir/ms-sysv"
74 set generator "$tmpdir/ms-sysv-generate.exe"
75 set generated_header "$objdir/ms-sysv-generated.h"
d6d4d770
DS
76 set status 0
77 set warn_flags "-Wall"
d6d4d770
DS
78
79 # Detect when hard frame pointers are enabled (or required) so we know not
80 # to generate bp clobbers.
52d0f7bd
DS
81 if { [regexp "(^| )-(O0|fno-omit-frame-pointer|p|pg)( |$)" \
82 "$TEST_ALWAYS_FLAGS $cflags" match]
83 || [istarget *-*-solaris*] } then {
d6d4d770
DS
84 set generator_args "$generator_args --omit-rbp-clobbers"
85 }
86
52d0f7bd
DS
87 # Add all other flags
88 set escaped_generator_args [regsub -all " " $generator_args "\\ "]
89 set cflags "$cflags\"-DGEN_ARGS=$escaped_generator_args\""
90
91 gcc_parallel_test_enable 1
92 if ![runtest_file_p $runtests "$srcdir/$subdir/ms-sysv.c"] then {
93 return
94 }
95
96 #verbose "runtest_ms_sysv $cflags" 0
97
98 # Make sure there's no previous header file so that we can't accidentally
99 # pass if generation fails.
100 file delete -force $generated_header
d6d4d770
DS
101
102 # Cleanup any previous test in objdir
103 file delete -force $objdir
104 file mkdir $objdir
105
106 # Build the generator (only needs to be done once).
107 set src "$srcdir/$subdir/gen.cc"
52d0f7bd
DS
108 if { (![file exists "$generator"]) || ([file mtime "$generator"]
109 < [file mtime "$src"]) } {
110 # Temporarily switch to the environment for the host compiler.
111 restore_ld_library_path_env_vars
3ab3a92e 112 set cxx "$HOSTCXX $HOSTCXXFLAGS $warn_flags -std=c++11"
52d0f7bd
DS
113 set status [remote_exec host "$cxx -o $generator $src"]
114 set status [lindex $status 0]
115 set_ld_library_path_env_vars
116 if { $status != 0 } then {
117 warning "Could not build $subdir generator"
d6d4d770
DS
118 }
119 }
120
121 # Generate header
122 if { $status == 0 } then {
123 set status [remote_exec host "$generator $generator_args $generated_header"]
124 set status [lindex $status 0]
125 if { $status != 0 } then {
126 warning "Could not generate $generated_header"
127 }
128 }
129
52d0f7bd
DS
130 gcc_parallel_test_enable 0
131 dg-runtest $srcdir/$subdir/ms-sysv.c "$cflags" "-I$objdir -I$srcdir/$subdir $warn_flags"
132 gcc_parallel_test_enable 1
d6d4d770
DS
133}
134
135dg-init
136
52d0f7bd
DS
137# Standard test parameters.
138set gen_pcount_opts [list "-p0" "-p1" "-p5"]
139set base_cflags_arr [list " -O2 " " -O0 -g3 "]
d6d4d770 140
52d0f7bd
DS
141foreach gen_opts $gen_pcount_opts {
142 foreach cflags $base_cflags_arr {
143 # Run without -mcall-ms2sysv-xlogues always
144 runtest_ms_sysv "$cflags" "$gen_opts"
d6d4d770 145
52d0f7bd
DS
146 # Skip unsupported -mcall-ms2sysv-xlogues on Windows
147 if { ![istarget *-*-cygwin*] && ![istarget *-*-mingw*] } {
148 runtest_ms_sysv "-mcall-ms2sysv-xlogues$cflags" "$gen_opts"
149 }
d6d4d770
DS
150 }
151}
152
153dg-finish