diff options
author | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-11-04 08:44:29 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-11-04 08:44:29 +0000 |
commit | f2ae4b2bd03c98446d25729a4483b35e515a08d4 (patch) | |
tree | 2baeb30ac5f592018a46140e8a34f178598a67b6 /gcc/testsuite | |
parent | a67ec6ab99c91c593138358b56dcc160aa09a015 (diff) | |
download | gcc-f2ae4b2bd03c98446d25729a4483b35e515a08d4.zip gcc-f2ae4b2bd03c98446d25729a4483b35e515a08d4.tar.gz gcc-f2ae4b2bd03c98446d25729a4483b35e515a08d4.tar.bz2 |
re PR libfortran/22298 (libgfortran init() constructor isn't called if executable is statically linked)
PR libfortran/22298
* runtime/main.c (stupid_function_name_for_static_linking): New
function.
* runtime/error.c (internal_error): Call
stupid_function_name_for_static_linking.
* libgfortran.h: Add prototype for
stupid_function_name_for_static_linking.
* gcc/testsuite/lib/target-supports.exp
(check_effective_target_static_libgfortran): New
static_libgfortran effective target.
* gcc/testsuite/gfortran.dg/static_linking_1.f: New test.
* gcc/testsuite/gfortran.dg/static_linking_1.c: New file.
From-SVN: r106484
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/static_linking_1.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/static_linking_1.f | 11 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 53 |
4 files changed, 82 insertions, 5 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e92490c..57c589c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2005-11-04 Francois-Xavier Coudert <coudert@clipper.ens.fr> + + PR libfortran/22298 + * gcc/testsuite/lib/target-supports.exp + (check_effective_target_static_libgfortran): New + static_libgfortran effective target. + * gcc/testsuite/gfortran.dg/static_linking_1.f: New test. + * gcc/testsuite/gfortran.dg/static_linking_1.c: New file. + 2005-11-04 Hans-Peter Nilsson <hp@axis.com> * gcc.dg/pr24615.c: Guard test with { target fpic }. @@ -129,11 +138,9 @@ 2005-11-02 Andrew Pinski <pinskia@physics.uc.edu> PR fortran/18157 - * gfortran.fortran-torture/compile/defined_type_1.f90: New test. - * gfortran.fortran-torture/compile/defined_type_2.f90: New - test. - * gfortran.fortran-torture/compile/defined_type_3.f90: - New test. + * gfortran.fortran-torture/compile/defined_type_1.f90: New test. + * gfortran.fortran-torture/compile/defined_type_2.f90: New test. + * gfortran.fortran-torture/compile/defined_type_3.f90: New test. 2005-11-02 Mark Mitchell <mark@codesourcery.com> diff --git a/gcc/testsuite/gfortran.dg/static_linking_1.c b/gcc/testsuite/gfortran.dg/static_linking_1.c new file mode 100644 index 0000000..e7d266d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/static_linking_1.c @@ -0,0 +1,6 @@ +extern void f_(void); +int main (void) +{ + f_(); + return 0; +} diff --git a/gcc/testsuite/gfortran.dg/static_linking_1.f b/gcc/testsuite/gfortran.dg/static_linking_1.f new file mode 100644 index 0000000..5107a07 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/static_linking_1.f @@ -0,0 +1,11 @@ +! { dg-require-effective-target static_libgfortran } +! { dg-do run } +! { dg-additional-sources static_linking_1.c } +! { dg-options "-static" } +! +! This testcase checks that statically linking libgfortran with C main() +! really calls the constructor function +! PR libfortran/22298 + subroutine f + print *, "subroutine output" + end diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 3116c42..38eb91a 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -602,6 +602,59 @@ proc check_effective_target_fortran_large_int { } { return $et_fortran_large_int_saved } +# Return 1 if we can statically link libgfortran, 0 otherwise. +# +# When the target name changes, replace the cached result. + +proc check_effective_target_static_libgfortran { } { + global et_static_libgfortran + global et_static_libgfortran_target_name + global tool + + if { ![info exists et_static_libgfortran_target_name] } { + set et_static_libgfortran_target_name "" + } + + # If the target has changed since we set the cached value, clear it. + set current_target [current_target_name] + if { $current_target != $et_static_libgfortran_target_name } { + verbose "check_effective_target_static_libgfortran: `$et_static_libgfortran_target_name' `$current_target'" 2 + set et_static_libgfortran_target_name $current_target + if [info exists et_static_libgfortran_saved] { + verbose "check_effective_target_static_libgfortran: removing cached result" 2 + unset et_static_libgfortran_saved + } + } + + if [info exists et_static_libgfortran_saved] { + verbose "check_effective_target_static_libgfortran returning saved $et_static_libgfortran_saved" 2 + } else { + set et_static_libgfortran_saved 0 + + # Set up, compile, and execute a test program using static linking. + # Include the current process ID in the file names to prevent + # conflicts with invocations for multiple testsuites. + set src static[pid].f + set exe static[pid].x + + set f [open $src "w"] + puts $f " print *, 'test'" + puts $f " end" + close $f + + verbose "check_effective_target_static_libgfortran compiling testfile $src" 2 + set lines [${tool}_target_compile $src $exe executable "-static"] + file delete $src + + if [string match "" $lines] then { + # No error message, compilation succeeded. + set et_static_libgfortran_saved 1 + } + } + + return $et_static_libgfortran_saved +} + # Return 1 if the target supports executing AltiVec instructions, 0 # otherwise. Cache the result. |