aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-11-04 08:44:29 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-11-04 08:44:29 +0000
commitf2ae4b2bd03c98446d25729a4483b35e515a08d4 (patch)
tree2baeb30ac5f592018a46140e8a34f178598a67b6 /gcc/testsuite
parenta67ec6ab99c91c593138358b56dcc160aa09a015 (diff)
downloadgcc-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/ChangeLog17
-rw-r--r--gcc/testsuite/gfortran.dg/static_linking_1.c6
-rw-r--r--gcc/testsuite/gfortran.dg/static_linking_1.f11
-rw-r--r--gcc/testsuite/lib/target-supports.exp53
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.