From 65650a47d37caf11fa040cf96e7c06229ade8611 Mon Sep 17 00:00:00 2001 From: rth Date: Mon, 1 Nov 2010 01:14:46 +0000 Subject: [PATCH] Disable -mpreferred-stack-boundary options for Windows. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166120 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 9 +++++++++ gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp | 12 ++++-------- gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp | 11 ++++------- gcc/testsuite/lib/target-supports.exp | 11 +++++++++-- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b46c15f3f62..900173928da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2010-10-31 Richard Henderson + + * lib/target-supports.exp + (check_effective_target_automatic_stack_alignment): True for + x86 but not windows. + * g++.dg/torture/stackalign/stackalign.exp: Use it to protect + use of the preferred-stack-boundary arguments. + * gcc.dg/torture/stackalign/stackalign.exp: Likewise. + 2010-10-31 H.J. Lu PR target/46142 diff --git a/gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp b/gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp index bfa413eab48..e68337d273d 100644 --- a/gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp +++ b/gcc/testsuite/g++.dg/torture/stackalign/stackalign.exp @@ -18,19 +18,15 @@ # This harness is for tests that should be run at all optimisation levels. load_lib g++-dg.exp - -# Only run on targets which support automatic stack alignment. -if { ![check_effective_target_automatic_stack_alignment] } then { - return -} - +dg-init set additional_flags "" -if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then { + +# If automatic stack alignment is supported, force it on. +if { [check_effective_target_automatic_stack_alignment] } then { lappend additional_flags "-mstackrealign" lappend additional_flags "-mpreferred-stack-boundary=5" } -dg-init gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.C]] $additional_flags if { [check_effective_target_fpic] } then { lappend additional_flags "-fpic" diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp b/gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp index ef45dbe4d03..83c623919d9 100644 --- a/gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp +++ b/gcc/testsuite/gcc.dg/torture/stackalign/stackalign.exp @@ -19,15 +19,12 @@ load_lib gcc-dg.exp -# Only run on targets which support automatic stack alignment. -if { ![check_effective_target_automatic_stack_alignment] } then { - return -} - set additional_flags "" -if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then { +if { [check_effective_target_automatic_stack_alignment] } then { lappend additional_flags "-mstackrealign" lappend additional_flags "-mpreferred-stack-boundary=5" +} +if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then { lappend additional_flags "-mno-mmx" } @@ -40,7 +37,7 @@ if { [check_effective_target_fpic] } then { gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $pic_additional_flags } -if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then { +if { [check_effective_target_automatic_stack_alignment] } then { lappend additional_flags "-mforce-drap" gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $additional_flags if { [check_effective_target_fpic] } then { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 0ae003ab44c..87b234d69ab 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3551,8 +3551,15 @@ proc check_effective_target_4byte_wchar_t { } { # Return 1 if the target supports automatic stack alignment. proc check_effective_target_automatic_stack_alignment { } { - # Not "stack alignment" per se, but proper stack alignment of decls. - return 1; + # Ordinarily x86 supports automatic stack alignment ... + if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then { + if { [istarget *-*-mingw*] || [istarget *-*-cygwin*] } { + # ... except Win64 SEH doesn't. Succeed for Win32 though. + return [check_effective_target_ilp32]; + } + return 1; + } + return 0; } # Return 1 if avx instructions can be compiled. -- 2.11.0