aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>2005-10-30 13:17:48 +0100
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-10-30 12:17:48 +0000
commit0d519038a0354f983534037fd9a7d460421e4fd0 (patch)
tree74008967faaa4d2ec3fb686ef0f09df588ecbd88 /libgfortran
parentcf6ae9554d33bc2afe113135a0f34d5022bb1972 (diff)
downloadgcc-0d519038a0354f983534037fd9a7d460421e4fd0.zip
gcc-0d519038a0354f983534037fd9a7d460421e4fd0.tar.gz
gcc-0d519038a0354f983534037fd9a7d460421e4fd0.tar.bz2
check.c (gfc_check_malloc, [...]): New functions.
* check.c (gfc_check_malloc, gfc_check_free): New functions. * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_MALLOC. * intrinsic.c (add_functions): Add symbols for MALLOC function. (add_subroutines): Add symbol for FREE subroutine. * intrinsic.h: Prototypes for gfc_check_malloc, gfc_check_free, gfc_resolve_malloc and gfc_resolve_free. * intrinsic.texi: Add doc for FREE and MALLOC intrinsics. * iresolve.c (gfc_resolve_malloc, gfc_resolve_free): New functions. * trans-intrinsic.c (gfc_conv_intrinsic_function): Add case for GFC_ISYM_MALLOC. * Makefile.am: Add intrinsics/malloc.c file. * Makefile.in: Regenerate. * intrinsics/malloc.c: New file, with implementations for free and malloc library functions. * gfortran.dg/malloc_free_1.f90: New test. From-SVN: r106016
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog7
-rw-r--r--libgfortran/Makefile.am1
-rw-r--r--libgfortran/Makefile.in8
-rw-r--r--libgfortran/intrinsics/malloc.c55
4 files changed, 69 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 9d225c1..85ea740 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,10 @@
+2005-10-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
+
+ * Makefile.am: Add intrinsics/malloc.c file.
+ * Makefile.in: Regenerate.
+ * intrinsics/malloc.c: New file, with implementations for free
+ and malloc library functions.
+
2005-10-29 Mike Stump <mrs@apple.com>
* Makefile.am (kinds.h): Remove target, if command fails.
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 696ac3f..a786a38 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -63,6 +63,7 @@ intrinsics/kill.c \
intrinsics/ierrno.c \
intrinsics/ishftc.c \
intrinsics/link.c \
+intrinsics/malloc.c \
intrinsics/mvbits.c \
intrinsics/pack_generic.c \
intrinsics/perror.c \
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index d52a54a..b8f52d5 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -169,8 +169,8 @@ am__objects_33 = associated.lo abort.lo args.lo bessel.lo \
date_and_time.lo env.lo erf.lo eoshift0.lo eoshift2.lo \
etime.lo exit.lo flush.lo fnum.lo gerror.lo getcwd.lo \
getlog.lo getXid.lo hyper.lo hostnm.lo kill.lo ierrno.lo \
- ishftc.lo link.lo mvbits.lo pack_generic.lo perror.lo \
- signal.lo size.lo sleep.lo spread_generic.lo \
+ ishftc.lo link.lo malloc.lo mvbits.lo pack_generic.lo \
+ perror.lo signal.lo size.lo sleep.lo spread_generic.lo \
string_intrinsics.lo system.lo rand.lo random.lo rename.lo \
reshape_generic.lo reshape_packed.lo selected_int_kind.lo \
selected_real_kind.lo stat.lo symlnk.lo system_clock.lo \
@@ -404,6 +404,7 @@ intrinsics/kill.c \
intrinsics/ierrno.c \
intrinsics/ishftc.c \
intrinsics/link.c \
+intrinsics/malloc.c \
intrinsics/mvbits.c \
intrinsics/pack_generic.c \
intrinsics/perror.c \
@@ -2291,6 +2292,9 @@ ishftc.lo: intrinsics/ishftc.c
link.lo: intrinsics/link.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o link.lo `test -f 'intrinsics/link.c' || echo '$(srcdir)/'`intrinsics/link.c
+malloc.lo: intrinsics/malloc.c
+ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o malloc.lo `test -f 'intrinsics/malloc.c' || echo '$(srcdir)/'`intrinsics/malloc.c
+
mvbits.lo: intrinsics/mvbits.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mvbits.lo `test -f 'intrinsics/mvbits.c' || echo '$(srcdir)/'`intrinsics/mvbits.c
diff --git a/libgfortran/intrinsics/malloc.c b/libgfortran/intrinsics/malloc.c
new file mode 100644
index 0000000..2f53d99
--- /dev/null
+++ b/libgfortran/intrinsics/malloc.c
@@ -0,0 +1,55 @@
+/* Implementation of the MALLOC and FREE intrinsics
+ Copyright (C) 2005 Free Software Foundation, Inc.
+ Contributed by François-Xavier Coudert <coudert@clipper.ens.fr>
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file. (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+Libgfortran is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with libgfortran; see the file COPYING. If not,
+write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
+
+#include "config.h"
+#include "libgfortran.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+extern void PREFIX(free) (void **);
+export_proto_np(PREFIX(free));
+
+void
+PREFIX(free) (void ** ptr)
+{
+ free (*ptr);
+}
+
+
+extern void * PREFIX(malloc) (size_t *);
+export_proto_np(PREFIX(malloc));
+
+void *
+PREFIX(malloc) (size_t * size)
+{
+ return malloc (*size);
+}