===================================================================
@@ -14,6 +14,15 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
+# Return 1 if compilation with -fsanitize=undefined is error-free for trivial
+# code, 0 otherwise.
+
+proc check_effective_target_fundefined_sanitizer {} {
+ return [check_no_compiler_messages fundefined_sanitizer executable {
+ int main (void) { return 0; }
+ } "-fsanitize=undefined"]
+}
+
#
# ubsan_link_flags -- compute library path and flags to find libubsan.
# (originally from g++.exp)
@@ -60,6 +69,7 @@ proc ubsan_init { args } {
global ALWAYS_CXXFLAGS
global TOOL_OPTIONS
global ubsan_saved_TEST_ALWAYS_FLAGS
+ global usan_saved_ALWAYS_CXXFLAGS
set link_flags ""
if ![is_remote host] {
@@ -74,6 +84,7 @@ proc ubsan_init { args } {
set ubsan_saved_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
}
if [info exists ALWAYS_CXXFLAGS] {
+ set usan_saved_ALWAYS_CXXFLAGS $ALWAYS_CXXFLAGS
set ALWAYS_CXXFLAGS [concat "{ldflags=$link_flags}" $ALWAYS_CXXFLAGS]
} else {
if [info exists TEST_ALWAYS_FLAGS] {
@@ -95,10 +106,15 @@ proc ubsan_init { args } {
proc ubsan_finish { args } {
global TEST_ALWAYS_FLAGS
global ubsan_saved_TEST_ALWAYS_FLAGS
+ global asan_saved_ALWAYS_CXXFLAGS
- if [info exists ubsan_saved_TEST_ALWAYS_FLAGS] {
- set TEST_ALWAYS_FLAGS $ubsan_saved_TEST_ALWAYS_FLAGS
+ if [info exists asan_saved_ALWAYS_CXXFLAGS ] {
+ set ALWAYS_CXXFLAGS $asan_saved_ALWAYS_CXXFLAGS
} else {
- unset TEST_ALWAYS_FLAGS
+ if [info exists ubsan_saved_TEST_ALWAYS_FLAGS] {
+ set TEST_ALWAYS_FLAGS $ubsan_saved_TEST_ALWAYS_FLAGS
+ } else {
+ unset TEST_ALWAYS_FLAGS
+ }
}
}
===================================================================
@@ -18,8 +18,8 @@
# code, 0 otherwise.
proc check_effective_target_faddress_sanitizer {} {
- return [check_no_compiler_messages faddress_sanitizer object {
- void foo (void) { }
+ return [check_no_compiler_messages faddress_sanitizer executable {
+ int main (void) { return 0; }
} "-fsanitize=address"]
}
@@ -69,6 +69,7 @@ proc asan_init { args } {
global ALWAYS_CXXFLAGS
global TOOL_OPTIONS
global asan_saved_TEST_ALWAYS_FLAGS
+ global asan_saved_ALWAYS_CXXFLAGS
set link_flags ""
if ![is_remote host] {
@@ -83,6 +84,7 @@ proc asan_init { args } {
set asan_saved_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
}
if [info exists ALWAYS_CXXFLAGS] {
+ set asan_saved_ALWAYS_CXXFLAGS $ALWAYS_CXXFLAGS
set ALWAYS_CXXFLAGS [concat "{ldflags=$link_flags}" $ALWAYS_CXXFLAGS]
set ALWAYS_CXXFLAGS [concat "{additional_flags=-fsanitize=address -g}" $ALWAYS_CXXFLAGS]
} else {
@@ -105,11 +107,16 @@ proc asan_init { args } {
proc asan_finish { args } {
global TEST_ALWAYS_FLAGS
global asan_saved_TEST_ALWAYS_FLAGS
+ global asan_saved_ALWAYS_CXXFLAGS
- if [info exists asan_saved_TEST_ALWAYS_FLAGS] {
- set TEST_ALWAYS_FLAGS $asan_saved_TEST_ALWAYS_FLAGS
+ if [info exists asan_saved_ALWAYS_CXXFLAGS ] {
+ set ALWAYS_CXXFLAGS $asan_saved_ALWAYS_CXXFLAGS
} else {
- unset TEST_ALWAYS_FLAGS
+ if [info exists asan_saved_TEST_ALWAYS_FLAGS] {
+ set TEST_ALWAYS_FLAGS $asan_saved_TEST_ALWAYS_FLAGS
+ } else {
+ unset TEST_ALWAYS_FLAGS
+ }
}
}
===================================================================
@@ -24,11 +24,11 @@ load_lib ubsan-dg.exp
# Initialize `dg'.
dg-init
-if [ubsan_init] {
+ubsan_init
# Main loop.
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/c-c++-common/ubsan/*.c]] ""
-
+if [check_effective_target_fundefined_sanitizer] {
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/c-c++-common/ubsan/*.c]] ""
}
# All done.
===================================================================
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+# Copyright (C) 2012 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@@ -22,17 +22,13 @@
load_lib gcc-dg.exp
load_lib asan-dg.exp
-if ![check_effective_target_faddress_sanitizer] {
- return
-}
-
# Initialize `dg'.
dg-init
-if [asan_init] {
+asan_init
# Main loop.
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/c-c++-common/asan/*.c]] ""
-
+if [check_effective_target_faddress_sanitizer] {
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/c-c++-common/asan/*.c]] ""
}
# All done.
===================================================================
@@ -22,11 +22,11 @@ load_lib ubsan-dg.exp
# Initialize `dg'.
dg-init
-if [ubsan_init] {
+ubsan_init
# Main loop.
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/ubsan/*.c]] ""
-
+if [check_effective_target_fundefined_sanitizer] {
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/ubsan/*.c]] ""
}
# All done.
===================================================================
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+# Copyright (C) 2012 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
@@ -20,17 +20,14 @@
load_lib g++-dg.exp
load_lib asan-dg.exp
-if ![check_effective_target_faddress_sanitizer] {
- return
-}
-
# Initialize `dg'.
dg-init
-if [asan_init] {
+asan_init
-# Main loop.
-gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/asan/*.c]] ""
+# Main loop.
+if [check_effective_target_faddress_sanitizer] {
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/asan/*.c]] ""
}
# All done.