# This whole file adapted from libgomp.c++/c++.exp. load_lib libgomp-dg.exp load_gcc_lib gcc-dg.exp load_gcc_lib torture-options.exp proc check_effective_target_c { } { return 0 } proc check_effective_target_c++ { } { return 1 } global shlib_ext set shlib_ext [get_shlib_extension] set lang_link_flags "-lstdc++" set lang_test_file_found 0 set lang_library_path "../libstdc++-v3/src/.libs" if [info exists lang_include_flags] then { unset lang_include_flags } # Initialize dg. dg-init torture-init # Turn on OpenACC. lappend ALWAYS_CFLAGS "additional_flags=-fopenacc" # Switch into C++ mode. Otherwise, the libgomp.oacc-c-c++-common/*.c # files would be compiled as C files. set SAVE_GCC_UNDER_TEST "$GCC_UNDER_TEST" set GCC_UNDER_TEST "$GCC_UNDER_TEST -x c++" set blddir [lookfor_file [get_multilibs] libgomp] if { $blddir != "" } { # Look for a static libstdc++ first. if [file exists "${blddir}/${lang_library_path}/libstdc++.a"] { set lang_test_file "${lang_library_path}/libstdc++.a" set lang_test_file_found 1 # We may have a shared only build, so look for a shared libstdc++. } elseif [file exists "${blddir}/${lang_library_path}/libstdc++.${shlib_ext}"] { set lang_test_file "${lang_library_path}/libstdc++.${shlib_ext}" set lang_test_file_found 1 } else { puts "No libstdc++ library found, will not execute c++ tests" } } elseif { [info exists GXX_UNDER_TEST] } { set lang_test_file_found 1 # Needs to exist for libgomp.exp. set lang_test_file "" } else { puts "GXX_UNDER_TEST not defined, will not execute c++ tests" } if { $lang_test_file_found } { # Gather a list of all tests. set tests [lsort [concat \ [find $srcdir/$subdir *.C] \ [find $srcdir/$subdir/../libgomp.oacc-c-c++-common *.c]]] if { $blddir != "" } { set ld_library_path "$always_ld_library_path:${blddir}/${lang_library_path}" } else { set ld_library_path "$always_ld_library_path" } append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST] set_ld_library_path_env_vars set flags_file "${blddir}/../libstdc++-v3/scripts/testsuite_flags" if { [file exists $flags_file] } { set libstdcxx_includes [exec sh $flags_file --build-includes] } else { set libstdcxx_includes "" } # Test OpenACC with available accelerators. foreach offload_target_openacc $offload_targets_s_openacc { set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1" switch $offload_target_openacc { host { set acc_mem_shared 1 } nvidia { if { ![check_effective_target_openacc_nvidia_accel_present] } { # Don't bother; execution testing is going to FAIL. untested "$subdir $offload_target_openacc offloading" continue } # Copy ptx file (TEMPORARY) remote_download host $srcdir/libgomp.oacc-c-c++-common/subr.ptx # Where timer.h lives lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/libgomp.oacc-c-c++-common" set acc_mem_shared 0 } default { set acc_mem_shared 0 } } set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared" setenv ACC_DEVICE_TYPE $offload_target_openacc # To get better test coverage for device-specific code that is only # ever used in offloading configurations, we'd like more thorough # testing for test cases that deal with offloading, which most of all # OpenACC test cases are. We enable torture testing, but limit it to # -O0 and -O2 only, to avoid testing times exploding too much, under # the assumption that between -O0 and -O[something] there is the # biggest difference in the overall structure of the generated code. switch $offload_target_openacc { host { set-torture-options [list \ { -O2 } ] } default { set-torture-options [list \ { -O0 } \ { -O2 } ] } } gcc-dg-runtest $tests "$tagopt" "$libstdcxx_includes" } } else { # Call this once, which placates the subsequent torture-finish. set-torture-options [list \ { INVALID } ] } # See above. set GCC_UNDER_TEST "$SAVE_GCC_UNDER_TEST" # All done. torture-finish dg-finish