import gcc-11.2.1-2.2.el9
This commit is contained in:
commit
26154996a1
4
.gcc.metadata
Normal file
4
.gcc.metadata
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
8bb88a8a2cc72b6e4563e0e5e19f53ff09d72ee1 SOURCES/gcc-11.2.1-20210728.tar.xz
|
||||||
|
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
||||||
|
6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||||
|
0e0c6f8d68ab0878f02287ac082c1077c831cd81 SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
SOURCES/gcc-11.2.1-20210728.tar.xz
|
||||||
|
SOURCES/isl-0.18.tar.bz2
|
||||||
|
SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||||
|
SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
27
SOURCES/gcc11-Wno-format-security.patch
Normal file
27
SOURCES/gcc11-Wno-format-security.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
2017-02-25 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* configure.ac: When adding -Wno-format, also add -Wno-format-security.
|
||||||
|
* configure: Regenerated.
|
||||||
|
|
||||||
|
--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
|
||||||
|
+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
|
||||||
|
@@ -480,7 +480,7 @@ AC_ARG_ENABLE(build-format-warnings,
|
||||||
|
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
|
||||||
|
[],[enable_build_format_warnings=yes])
|
||||||
|
AS_IF([test $enable_build_format_warnings = no],
|
||||||
|
- [wf_opt=-Wno-format],[wf_opt=])
|
||||||
|
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
|
||||||
|
ACX_PROG_CXX_WARNING_OPTS(
|
||||||
|
m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
|
||||||
|
[-Wcast-qual -Wno-error=format-diag $wf_opt])),
|
||||||
|
--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
|
||||||
|
+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
|
||||||
|
@@ -6647,7 +6647,7 @@ else
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $enable_build_format_warnings = no; then :
|
||||||
|
- wf_opt=-Wno-format
|
||||||
|
+ wf_opt="-Wno-format -Wno-format-security"
|
||||||
|
else
|
||||||
|
wf_opt=
|
||||||
|
fi
|
20
SOURCES/gcc11-d-shared-libphobos.patch
Normal file
20
SOURCES/gcc11-d-shared-libphobos.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* d-spec.cc (lang_specific_driver): Make -shared-libphobos
|
||||||
|
the default rather than -static-libphobos.
|
||||||
|
|
||||||
|
--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100
|
||||||
|
+++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100
|
||||||
|
@@ -408,9 +408,9 @@ lang_specific_driver (cl_decoded_option
|
||||||
|
/* Add `-lgphobos' if we haven't already done so. */
|
||||||
|
if (phobos_library != PHOBOS_NOLINK)
|
||||||
|
{
|
||||||
|
- /* Default to static linking. */
|
||||||
|
- if (phobos_library != PHOBOS_DYNAMIC)
|
||||||
|
- phobos_library = PHOBOS_STATIC;
|
||||||
|
+ /* Default to shared linking. */
|
||||||
|
+ if (phobos_library != PHOBOS_STATIC)
|
||||||
|
+ phobos_library = PHOBOS_DYNAMIC;
|
||||||
|
|
||||||
|
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||||
|
if (phobos_library == PHOBOS_STATIC && !static_link)
|
116
SOURCES/gcc11-foffload-default.patch
Normal file
116
SOURCES/gcc11-foffload-default.patch
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
2019-01-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.c (offload_targets_default): New variable.
|
||||||
|
(process_command): Set it if -foffload is defaulted.
|
||||||
|
(driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1
|
||||||
|
into environment if -foffload has been defaulted.
|
||||||
|
* lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
|
||||||
|
(compile_offload_image): If OFFLOAD_TARGET_DEFAULT
|
||||||
|
is in the environment, don't fail if corresponding mkoffload
|
||||||
|
can't be found.
|
||||||
|
(compile_images_for_offload_targets): Likewise. Free and clear
|
||||||
|
offload_names if no valid offload is found.
|
||||||
|
libgomp/
|
||||||
|
* target.c (gomp_load_plugin_for_device): If a plugin can't be
|
||||||
|
dlopened, assume it has no devices silently.
|
||||||
|
|
||||||
|
--- gcc/gcc.c.jj 2017-01-17 10:28:40.000000000 +0100
|
||||||
|
+++ gcc/gcc.c 2017-01-20 16:26:29.649962902 +0100
|
||||||
|
@@ -319,6 +319,10 @@ static const char *spec_host_machine = D
|
||||||
|
|
||||||
|
static char *offload_targets = NULL;
|
||||||
|
|
||||||
|
+/* Set to true if -foffload has not been used and offload_targets
|
||||||
|
+ is set to the configured in default. */
|
||||||
|
+static bool offload_targets_default;
|
||||||
|
+
|
||||||
|
/* Nonzero if cross-compiling.
|
||||||
|
When -b is used, the value comes from the `specs' file. */
|
||||||
|
|
||||||
|
@@ -4828,7 +4832,10 @@ process_command (unsigned int decoded_op
|
||||||
|
/* If the user didn't specify any, default to all configured offload
|
||||||
|
targets. */
|
||||||
|
if (ENABLE_OFFLOADING && offload_targets == NULL)
|
||||||
|
- handle_foffload_option (OFFLOAD_TARGETS);
|
||||||
|
+ {
|
||||||
|
+ handle_foffload_option (OFFLOAD_TARGETS);
|
||||||
|
+ offload_targets_default = true;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Handle -gtoggle as it would later in toplev.c:process_options to
|
||||||
|
make the debug-level-gt spec function work as expected. */
|
||||||
|
@@ -8494,6 +8501,8 @@ driver::maybe_putenv_OFFLOAD_TARGETS ()
|
||||||
|
obstack_grow (&collect_obstack, offload_targets,
|
||||||
|
strlen (offload_targets) + 1);
|
||||||
|
xputenv (XOBFINISH (&collect_obstack, char *));
|
||||||
|
+ if (offload_targets_default)
|
||||||
|
+ xputenv ("OFFLOAD_TARGET_DEFAULT=1");
|
||||||
|
}
|
||||||
|
|
||||||
|
free (offload_targets);
|
||||||
|
--- gcc/lto-wrapper.c.jj 2017-01-01 12:45:34.000000000 +0100
|
||||||
|
+++ gcc/lto-wrapper.c 2017-01-20 16:34:18.294016997 +0100
|
||||||
|
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3.
|
||||||
|
/* Environment variable, used for passing the names of offload targets from GCC
|
||||||
|
driver to lto-wrapper. */
|
||||||
|
#define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES"
|
||||||
|
+#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT"
|
||||||
|
|
||||||
|
/* By default there is no special suffix for target executables. */
|
||||||
|
#ifdef TARGET_EXECUTABLE_SUFFIX
|
||||||
|
@@ -906,6 +907,12 @@ compile_offload_image (const char *targe
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV))
|
||||||
|
+ {
|
||||||
|
+ free_array_of_ptrs ((void **) paths, n_paths);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!compiler)
|
||||||
|
fatal_error (input_location,
|
||||||
|
"could not find %s in %s (consider using %<-B%>)",
|
||||||
|
@@ -975,6 +982,7 @@ compile_images_for_offload_targets (unsi
|
||||||
|
if (!target_names)
|
||||||
|
return;
|
||||||
|
unsigned num_targets = parse_env_var (target_names, &names, NULL);
|
||||||
|
+ int next_name_entry = 0;
|
||||||
|
|
||||||
|
const char *compiler_path = getenv ("COMPILER_PATH");
|
||||||
|
if (!compiler_path)
|
||||||
|
@@ -985,13 +993,19 @@ compile_images_for_offload_targets (unsi
|
||||||
|
offload_names = XCNEWVEC (char *, num_targets + 1);
|
||||||
|
for (unsigned i = 0; i < num_targets; i++)
|
||||||
|
{
|
||||||
|
- offload_names[i]
|
||||||
|
+ offload_names[next_name_entry]
|
||||||
|
= compile_offload_image (names[i], compiler_path, in_argc, in_argv,
|
||||||
|
compiler_opts, compiler_opt_count,
|
||||||
|
linker_opts, linker_opt_count);
|
||||||
|
- if (!offload_names[i])
|
||||||
|
- fatal_error (input_location,
|
||||||
|
- "problem with building target image for %s", names[i]);
|
||||||
|
+ if (!offload_names[next_name_entry])
|
||||||
|
+ continue;
|
||||||
|
+ next_name_entry++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (next_name_entry == 0)
|
||||||
|
+ {
|
||||||
|
+ free (offload_names);
|
||||||
|
+ offload_names = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
--- libgomp/target.c.jj 2017-01-01 12:45:52.000000000 +0100
|
||||||
|
+++ libgomp/target.c 2017-01-20 20:12:13.756710875 +0100
|
||||||
|
@@ -2356,7 +2356,7 @@ gomp_load_plugin_for_device (struct gomp
|
||||||
|
|
||||||
|
void *plugin_handle = dlopen (plugin_name, RTLD_LAZY);
|
||||||
|
if (!plugin_handle)
|
||||||
|
- goto dl_fail;
|
||||||
|
+ return 0;
|
||||||
|
|
||||||
|
/* Check if all required functions are available in the plugin and store
|
||||||
|
their handlers. None of the symbols can legitimately be NULL,
|
181
SOURCES/gcc11-fortran-fdec-add-missing-indexes.patch
Normal file
181
SOURCES/gcc11-fortran-fdec-add-missing-indexes.patch
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
From 7001d522d0273658d9e1fb12ca104d56bfcae34d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 15:06:08 +0000
|
||||||
|
Subject: [PATCH 10/10] Fill in missing array dimensions using the lower bound
|
||||||
|
|
||||||
|
Use -fdec-add-missing-indexes to enable feature. Also enabled by fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 8 ++++++++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
gcc/fortran/resolve.c | 24 ++++++++++++++++++++++++
|
||||||
|
gcc/testsuite/gfortran.dg/array_6.f90 | 23 +++++++++++++++++++++++
|
||||||
|
gcc/testsuite/gfortran.dg/array_7.f90 | 23 +++++++++++++++++++++++
|
||||||
|
gcc/testsuite/gfortran.dg/array_8.f90 | 23 +++++++++++++++++++++++
|
||||||
|
6 files changed, 102 insertions(+)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/array_6.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/array_7.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/array_8.f90
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 019c798cf09..f27de88ea3f 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -281,6 +281,10 @@ Wmissing-include-dirs
|
||||||
|
Fortran
|
||||||
|
; Documented in C/C++
|
||||||
|
|
||||||
|
+Wmissing-index
|
||||||
|
+Fortran Var(warn_missing_index) Warning LangEnabledBy(Fortran,Wall)
|
||||||
|
+Warn that the lower bound of a missing index will be used.
|
||||||
|
+
|
||||||
|
Wuse-without-only
|
||||||
|
Fortran Var(warn_use_without_only) Warning
|
||||||
|
Warn about USE statements that have no ONLY qualifier.
|
||||||
|
@@ -460,6 +464,10 @@ fdec
|
||||||
|
Fortran Var(flag_dec)
|
||||||
|
Enable all DEC language extensions.
|
||||||
|
|
||||||
|
+fdec-add-missing-indexes
|
||||||
|
+Fortran Var(flag_dec_add_missing_indexes)
|
||||||
|
+Enable the addition of missing indexes using their lower bounds.
|
||||||
|
+
|
||||||
|
fdec-blank-format-item
|
||||||
|
Fortran Var(flag_dec_blank_format_item)
|
||||||
|
Enable the use of blank format items in format strings.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index 050f56fdc25..c3b2822685d 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -84,6 +84,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_non_logical_if, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_promotion, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_sequence, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_add_missing_indexes, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||||
|
index fe7d0cc5944..0efeedab46e 100644
|
||||||
|
--- a/gcc/fortran/resolve.c
|
||||||
|
+++ b/gcc/fortran/resolve.c
|
||||||
|
@@ -4806,6 +4806,30 @@ compare_spec_to_ref (gfc_array_ref *ar)
|
||||||
|
if (ar->type == AR_FULL)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
+ if (flag_dec_add_missing_indexes && as->rank > ar->dimen)
|
||||||
|
+ {
|
||||||
|
+ /* Add in the missing dimensions, assuming they are the lower bound
|
||||||
|
+ of that dimension if not specified. */
|
||||||
|
+ int j;
|
||||||
|
+ if (warn_missing_index)
|
||||||
|
+ {
|
||||||
|
+ gfc_warning (OPT_Wmissing_index, "Using the lower bound for "
|
||||||
|
+ "unspecified dimensions in array reference at %L",
|
||||||
|
+ &ar->where);
|
||||||
|
+ }
|
||||||
|
+ /* Other parts of the code iterate ar->start and ar->end from 0 to
|
||||||
|
+ ar->dimen, so it is safe to assume slots from ar->dimen upwards
|
||||||
|
+ are unused (i.e. there are no gaps; the specified indexes are
|
||||||
|
+ contiguous and start at zero. */
|
||||||
|
+ for(j = ar->dimen; j <= as->rank; j++)
|
||||||
|
+ {
|
||||||
|
+ ar->start[j] = gfc_copy_expr (as->lower[j]);
|
||||||
|
+ ar->end[j] = gfc_copy_expr (as->lower[j]);
|
||||||
|
+ ar->dimen_type[j] = DIMEN_ELEMENT;
|
||||||
|
+ }
|
||||||
|
+ ar->dimen = as->rank;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (as->rank != ar->dimen)
|
||||||
|
{
|
||||||
|
gfc_error ("Rank mismatch in array reference at %L (%d/%d)",
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/array_6.f90 b/gcc/testsuite/gfortran.dg/array_6.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..5c26e18ab3e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/array_6.f90
|
||||||
|
@@ -0,0 +1,23 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec -Wmissing-index" }!
|
||||||
|
+! Checks that under-specified arrays (referencing arrays with fewer
|
||||||
|
+! dimensions than the array spec) generates a warning.
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Updated by Mark Eggleston <mark.eggleston@codethink.co.uk>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program under_specified_array
|
||||||
|
+ integer chessboard(8,8)
|
||||||
|
+ integer chessboard3d(8,8,3:5)
|
||||||
|
+ chessboard(3,1) = 5
|
||||||
|
+ chessboard(3,2) = 55
|
||||||
|
+ chessboard3d(4,1,3) = 6
|
||||||
|
+ chessboard3d(4,1,4) = 66
|
||||||
|
+ chessboard3d(4,4,3) = 7
|
||||||
|
+ chessboard3d(4,4,4) = 77
|
||||||
|
+
|
||||||
|
+ if (chessboard(3).ne.5) stop 1 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+ if (chessboard3d(4).ne.6) stop 2 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+ if (chessboard3d(4,4).ne.7) stop 3 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+end program
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/array_7.f90 b/gcc/testsuite/gfortran.dg/array_7.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..5588a5bd02d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/array_7.f90
|
||||||
|
@@ -0,0 +1,23 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-add-missing-indexes -Wmissing-index" }!
|
||||||
|
+! Checks that under-specified arrays (referencing arrays with fewer
|
||||||
|
+! dimensions than the array spec) generates a warning.
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Updated by Mark Eggleston <mark.eggleston@codethink.co.uk>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program under_specified_array
|
||||||
|
+ integer chessboard(8,8)
|
||||||
|
+ integer chessboard3d(8,8,3:5)
|
||||||
|
+ chessboard(3,1) = 5
|
||||||
|
+ chessboard(3,2) = 55
|
||||||
|
+ chessboard3d(4,1,3) = 6
|
||||||
|
+ chessboard3d(4,1,4) = 66
|
||||||
|
+ chessboard3d(4,4,3) = 7
|
||||||
|
+ chessboard3d(4,4,4) = 77
|
||||||
|
+
|
||||||
|
+ if (chessboard(3).ne.5) stop 1 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+ if (chessboard3d(4).ne.6) stop 2 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+ if (chessboard3d(4,4).ne.7) stop 3 ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||||
|
+end program
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/array_8.f90 b/gcc/testsuite/gfortran.dg/array_8.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..f0d2ef5e37d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/array_8.f90
|
||||||
|
@@ -0,0 +1,23 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-add-missing-indexes" }!
|
||||||
|
+! Checks that under-specified arrays (referencing arrays with fewer
|
||||||
|
+! dimensions than the array spec) generates a warning.
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Updated by Mark Eggleston <mark.eggleston@codethink.co.uk>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program under_specified_array
|
||||||
|
+ integer chessboard(8,8)
|
||||||
|
+ integer chessboard3d(8,8,3:5)
|
||||||
|
+ chessboard(3,1) = 5
|
||||||
|
+ chessboard(3,2) = 55
|
||||||
|
+ chessboard3d(4,1,3) = 6
|
||||||
|
+ chessboard3d(4,1,4) = 66
|
||||||
|
+ chessboard3d(4,4,3) = 7
|
||||||
|
+ chessboard3d(4,4,4) = 77
|
||||||
|
+
|
||||||
|
+ if (chessboard(3).ne.5) stop 1 ! { dg-error "Rank mismatch" }
|
||||||
|
+ if (chessboard3d(4).ne.6) stop 2 ! { dg-error "Rank mismatch" }
|
||||||
|
+ if (chessboard3d(4,4).ne.7) stop 3 ! { dg-error "Rank mismatch" }
|
||||||
|
+end program
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
215
SOURCES/gcc11-fortran-fdec-duplicates.patch
Normal file
215
SOURCES/gcc11-fortran-fdec-duplicates.patch
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
From 23b1fcb104c666429451ffaf936f8da5fcd3d43a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 12:29:47 +0000
|
||||||
|
Subject: [PATCH 01/10] Allow duplicate declarations.
|
||||||
|
|
||||||
|
Enabled by -fdec-duplicates and -fdec.
|
||||||
|
|
||||||
|
Some fixes by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
Addition of -fdec-duplicates by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 4 ++++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
gcc/fortran/symbol.c | 21 +++++++++++++++++--
|
||||||
|
.../gfortran.dg/duplicate_type_4.f90 | 13 ++++++++++++
|
||||||
|
.../gfortran.dg/duplicate_type_5.f90 | 13 ++++++++++++
|
||||||
|
.../gfortran.dg/duplicate_type_6.f90 | 13 ++++++++++++
|
||||||
|
.../gfortran.dg/duplicate_type_7.f90 | 13 ++++++++++++
|
||||||
|
.../gfortran.dg/duplicate_type_8.f90 | 12 +++++++++++
|
||||||
|
.../gfortran.dg/duplicate_type_9.f90 | 12 +++++++++++
|
||||||
|
9 files changed, 100 insertions(+), 2 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_4.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_5.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_6.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_7.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_8.f90
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_9.f90
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 2b1977c523b..52bd522051e 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -469,6 +469,10 @@ Fortran Var(flag_dec_char_conversions)
|
||||||
|
Enable the use of character literals in assignments and data statements
|
||||||
|
for non-character variables.
|
||||||
|
|
||||||
|
+fdec-duplicates
|
||||||
|
+Fortran Var(flag_dec_duplicates)
|
||||||
|
+Allow varibles to be duplicated in the type specification matches.
|
||||||
|
+
|
||||||
|
fdec-include
|
||||||
|
Fortran Var(flag_dec_include)
|
||||||
|
Enable legacy parsing of INCLUDE as statement.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index 3a0b98bf1ec..f19ba87f8a0 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -77,6 +77,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_format_defaults, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_blank_format_item, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_char_conversions, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_duplicates, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
|
||||||
|
index 3b988d1be22..9843175cc2a 100644
|
||||||
|
--- a/gcc/fortran/symbol.c
|
||||||
|
+++ b/gcc/fortran/symbol.c
|
||||||
|
@@ -1995,6 +1995,8 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
|
||||||
|
if (sym->attr.result && type == BT_UNKNOWN && sym->ns->proc_name)
|
||||||
|
type = sym->ns->proc_name->ts.type;
|
||||||
|
|
||||||
|
+ flavor = sym->attr.flavor;
|
||||||
|
+
|
||||||
|
if (type != BT_UNKNOWN && !(sym->attr.function && sym->attr.implicit_type)
|
||||||
|
&& !(gfc_state_stack->previous && gfc_state_stack->previous->previous
|
||||||
|
&& gfc_state_stack->previous->previous->state == COMP_SUBMODULE)
|
||||||
|
@@ -2007,6 +2009,23 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
|
||||||
|
else if (sym->attr.function && sym->attr.result)
|
||||||
|
gfc_error ("Symbol %qs at %L already has basic type of %s",
|
||||||
|
sym->ns->proc_name->name, where, gfc_basic_typename (type));
|
||||||
|
+ else if (flag_dec_duplicates)
|
||||||
|
+ {
|
||||||
|
+ /* Ignore temporaries and class/procedure names */
|
||||||
|
+ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS
|
||||||
|
+ || sym->ts.type == BT_PROCEDURE)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ if (gfc_compare_types (&sym->ts, ts)
|
||||||
|
+ && (flavor == FL_UNKNOWN || flavor == FL_VARIABLE
|
||||||
|
+ || flavor == FL_PROCEDURE))
|
||||||
|
+ {
|
||||||
|
+ return gfc_notify_std (GFC_STD_LEGACY,
|
||||||
|
+ "Symbol '%qs' at %L already has "
|
||||||
|
+ "basic type of %s", sym->name, where,
|
||||||
|
+ gfc_basic_typename (type));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name,
|
||||||
|
where, gfc_basic_typename (type));
|
||||||
|
@@ -2020,8 +2039,6 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
- flavor = sym->attr.flavor;
|
||||||
|
-
|
||||||
|
if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE
|
||||||
|
|| flavor == FL_LABEL
|
||||||
|
|| (flavor == FL_PROCEDURE && sym->attr.subroutine)
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..cdd29ea8846
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-std=f95" }
|
||||||
|
+
|
||||||
|
+! PR fortran/30239
|
||||||
|
+! Check for errors when a symbol gets declared a type twice, even if it
|
||||||
|
+! is the same.
|
||||||
|
+
|
||||||
|
+INTEGER FUNCTION foo ()
|
||||||
|
+ IMPLICIT NONE
|
||||||
|
+ INTEGER :: x
|
||||||
|
+ INTEGER :: x ! { dg-error "basic type of" }
|
||||||
|
+ x = 42
|
||||||
|
+END FUNCTION foo
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..00f931809aa
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program test
|
||||||
|
+ implicit none
|
||||||
|
+ integer :: x
|
||||||
|
+ integer :: x
|
||||||
|
+ x = 42
|
||||||
|
+ if (x /= 42) stop 1
|
||||||
|
+end program test
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..f0df27e323c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-std=legacy -fdec-duplicates" }
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program test
|
||||||
|
+ implicit none
|
||||||
|
+ integer :: x
|
||||||
|
+ integer :: x
|
||||||
|
+ x = 42
|
||||||
|
+ if (x /= 42) stop 1
|
||||||
|
+end program test
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..f32472ff586
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-duplicates" }
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+program test
|
||||||
|
+ implicit none
|
||||||
|
+ integer :: x
|
||||||
|
+ integer :: x! { dg-warning "Legacy Extension" }
|
||||||
|
+ x = 42
|
||||||
|
+ if (x /= 42) stop 1
|
||||||
|
+end program test
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..23c94add179
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
|
||||||
|
@@ -0,0 +1,12 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-duplicates" }
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+integer function foo ()
|
||||||
|
+ implicit none
|
||||||
|
+ integer :: x
|
||||||
|
+ integer :: x ! { dg-error "basic type of" }
|
||||||
|
+ x = 42
|
||||||
|
+end function foo
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..d5edee4d8ee
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
|
||||||
|
@@ -0,0 +1,12 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec-duplicates -fno-dec-duplicates" }
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+integer function foo ()
|
||||||
|
+ implicit none
|
||||||
|
+ integer :: x
|
||||||
|
+ integer :: x ! { dg-error "basic type of" }
|
||||||
|
+ x = 42
|
||||||
|
+end function foo
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
78
SOURCES/gcc11-fortran-fdec-ichar.patch
Normal file
78
SOURCES/gcc11-fortran-fdec-ichar.patch
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
From f883ac209b0feea860354cb4ef7ff06dc8063fab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 12:53:35 +0000
|
||||||
|
Subject: [PATCH 03/10] Allow more than one character as argument to ICHAR
|
||||||
|
|
||||||
|
Use -fdec to enable.
|
||||||
|
---
|
||||||
|
gcc/fortran/check.c | 2 +-
|
||||||
|
gcc/fortran/simplify.c | 4 ++--
|
||||||
|
.../gfortran.dg/dec_ichar_with_string_1.f | 21 +++++++++++++++++++
|
||||||
|
3 files changed, 24 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
|
||||||
|
index 82db8e4e1b2..623c1cc470e 100644
|
||||||
|
--- a/gcc/fortran/check.c
|
||||||
|
+++ b/gcc/fortran/check.c
|
||||||
|
@@ -3157,7 +3157,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
|
||||||
|
- if (i != 1)
|
||||||
|
+ if (i != 1 && !flag_dec)
|
||||||
|
{
|
||||||
|
gfc_error ("Argument of %s at %L must be of length one",
|
||||||
|
gfc_current_intrinsic, &c->where);
|
||||||
|
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
|
||||||
|
index 23317a2e2d9..9900572424f 100644
|
||||||
|
--- a/gcc/fortran/simplify.c
|
||||||
|
+++ b/gcc/fortran/simplify.c
|
||||||
|
@@ -3261,7 +3261,7 @@ gfc_simplify_iachar (gfc_expr *e, gfc_expr *kind)
|
||||||
|
if (e->expr_type != EXPR_CONSTANT)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
- if (e->value.character.length != 1)
|
||||||
|
+ if (e->value.character.length != 1 && !flag_dec)
|
||||||
|
{
|
||||||
|
gfc_error ("Argument of IACHAR at %L must be of length one", &e->where);
|
||||||
|
return &gfc_bad_expr;
|
||||||
|
@@ -3459,7 +3459,7 @@ gfc_simplify_ichar (gfc_expr *e, gfc_expr *kind)
|
||||||
|
if (e->expr_type != EXPR_CONSTANT)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
- if (e->value.character.length != 1)
|
||||||
|
+ if (e->value.character.length != 1 && !flag_dec)
|
||||||
|
{
|
||||||
|
gfc_error ("Argument of ICHAR at %L must be of length one", &e->where);
|
||||||
|
return &gfc_bad_expr;
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..85efccecc0f
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_ichar_with_string_1.f
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test ICHAR and IACHAR with more than one character as argument
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM ichar_more_than_one_character
|
||||||
|
+ CHARACTER*4 st/'Test'/
|
||||||
|
+ INTEGER i
|
||||||
|
+
|
||||||
|
+ i = ICHAR(st)
|
||||||
|
+ if (i.NE.84) STOP 1
|
||||||
|
+ i = IACHAR(st)
|
||||||
|
+ if (i.NE.84) STOP 2
|
||||||
|
+ i = ICHAR('Test')
|
||||||
|
+ if (i.NE.84) STOP 3
|
||||||
|
+ i = IACHAR('Test')
|
||||||
|
+ if (i.NE.84) STOP 4
|
||||||
|
+ END
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
158
SOURCES/gcc11-fortran-fdec-non-integer-index.patch
Normal file
158
SOURCES/gcc11-fortran-fdec-non-integer-index.patch
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
From 67aef262311d6a746786ee0f59748ccaa7e1e711 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 13:09:54 +0000
|
||||||
|
Subject: [PATCH 04/10] Allow non-integer substring indexes
|
||||||
|
|
||||||
|
Use -fdec-non-integer-index compiler flag to enable. Also enabled by -fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 4 ++++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
gcc/fortran/resolve.c | 20 +++++++++++++++++++
|
||||||
|
.../dec_not_integer_substring_indexes_1.f | 18 +++++++++++++++++
|
||||||
|
.../dec_not_integer_substring_indexes_2.f | 18 +++++++++++++++++
|
||||||
|
.../dec_not_integer_substring_indexes_3.f | 18 +++++++++++++++++
|
||||||
|
6 files changed, 79 insertions(+)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_3.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index c4da248f07c..d527c106bd6 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -489,6 +489,10 @@ fdec-math
|
||||||
|
Fortran Var(flag_dec_math)
|
||||||
|
Enable legacy math intrinsics for compatibility.
|
||||||
|
|
||||||
|
+fdec-non-integer-index
|
||||||
|
+Fortran Var(flag_dec_non_integer_index)
|
||||||
|
+Enable support for non-integer substring indexes.
|
||||||
|
+
|
||||||
|
fdec-structure
|
||||||
|
Fortran Var(flag_dec_structure)
|
||||||
|
Enable support for DEC STRUCTURE/RECORD.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index f19ba87f8a0..9a042f64881 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -78,6 +78,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_blank_format_item, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_char_conversions, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_duplicates, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_non_integer_index, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||||
|
index 4b90cb59902..bc0df0fdb99 100644
|
||||||
|
--- a/gcc/fortran/resolve.c
|
||||||
|
+++ b/gcc/fortran/resolve.c
|
||||||
|
@@ -5131,6 +5131,16 @@ gfc_resolve_substring (gfc_ref *ref, bool *equal_length)
|
||||||
|
if (!gfc_resolve_expr (ref->u.ss.start))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
+ /* In legacy mode, allow non-integer string indexes by converting */
|
||||||
|
+ if (flag_dec_non_integer_index && ref->u.ss.start->ts.type != BT_INTEGER
|
||||||
|
+ && gfc_numeric_ts (&ref->u.ss.start->ts))
|
||||||
|
+ {
|
||||||
|
+ gfc_typespec t;
|
||||||
|
+ t.type = BT_INTEGER;
|
||||||
|
+ t.kind = ref->u.ss.start->ts.kind;
|
||||||
|
+ gfc_convert_type_warn (ref->u.ss.start, &t, 2, 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (ref->u.ss.start->ts.type != BT_INTEGER)
|
||||||
|
{
|
||||||
|
gfc_error ("Substring start index at %L must be of type INTEGER",
|
||||||
|
@@ -5160,6 +5170,16 @@ gfc_resolve_substring (gfc_ref *ref, bool *equal_length)
|
||||||
|
if (!gfc_resolve_expr (ref->u.ss.end))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
+ /* Non-integer string index endings, as for start */
|
||||||
|
+ if (flag_dec_non_integer_index && ref->u.ss.end->ts.type != BT_INTEGER
|
||||||
|
+ && gfc_numeric_ts (&ref->u.ss.end->ts))
|
||||||
|
+ {
|
||||||
|
+ gfc_typespec t;
|
||||||
|
+ t.type = BT_INTEGER;
|
||||||
|
+ t.kind = ref->u.ss.end->ts.kind;
|
||||||
|
+ gfc_convert_type_warn (ref->u.ss.end, &t, 2, 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (ref->u.ss.end->ts.type != BT_INTEGER)
|
||||||
|
{
|
||||||
|
gfc_error ("Substring end index at %L must be of type INTEGER",
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_1.f b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..0be28abaa4b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_1.f
|
||||||
|
@@ -0,0 +1,18 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test not integer substring indexes
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM not_integer_substring_indexes
|
||||||
|
+ CHARACTER*5 st/'Tests'/
|
||||||
|
+ REAL ir/1.0/
|
||||||
|
+ REAL ir2/4.0/
|
||||||
|
+
|
||||||
|
+ if (st(ir:4).ne.'Test') stop 1
|
||||||
|
+ if (st(1:ir2).ne.'Test') stop 2
|
||||||
|
+ if (st(1.0:4).ne.'Test') stop 3
|
||||||
|
+ if (st(1:4.0).ne.'Test') stop 4
|
||||||
|
+ if (st(2.5:4).ne.'est') stop 5
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_2.f b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..3cf05296d0c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_2.f
|
||||||
|
@@ -0,0 +1,18 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-non-integer-index" }
|
||||||
|
+!
|
||||||
|
+! Test not integer substring indexes
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM not_integer_substring_indexes
|
||||||
|
+ CHARACTER*5 st/'Tests'/
|
||||||
|
+ REAL ir/1.0/
|
||||||
|
+ REAL ir2/4.0/
|
||||||
|
+
|
||||||
|
+ if (st(ir:4).ne.'Test') stop 1
|
||||||
|
+ if (st(1:ir2).ne.'Test') stop 2
|
||||||
|
+ if (st(1.0:4).ne.'Test') stop 3
|
||||||
|
+ if (st(1:4.0).ne.'Test') stop 4
|
||||||
|
+ if (st(2.5:4).ne.'est') stop 5
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_3.f b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..703de995897
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes_3.f
|
||||||
|
@@ -0,0 +1,18 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-non-integer-index" }
|
||||||
|
+!
|
||||||
|
+! Test not integer substring indexes
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM not_integer_substring_indexes
|
||||||
|
+ CHARACTER*5 st/'Tests'/
|
||||||
|
+ REAL ir/1.0/
|
||||||
|
+ REAL ir2/4.0/
|
||||||
|
+
|
||||||
|
+ if (st(ir:4).ne.'Test') stop 1 ! { dg-error "Substring start index" }
|
||||||
|
+ if (st(1:ir2).ne.'Test') stop 2 ! { dg-error "Substring end index" }
|
||||||
|
+ if (st(1.0:4).ne.'Test') stop 3 ! { dg-error "Substring start index" }
|
||||||
|
+ if (st(1:4.0).ne.'Test') stop 4 ! { dg-error "Substring end index" }
|
||||||
|
+ if (st(2.5:4).ne.'est') stop 5 ! { dg-error "Substring start index" }
|
||||||
|
+ END
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
378
SOURCES/gcc11-fortran-fdec-non-logical-if.patch
Normal file
378
SOURCES/gcc11-fortran-fdec-non-logical-if.patch
Normal file
@ -0,0 +1,378 @@
|
|||||||
|
From cc87ddb841017bb0976b05091733609ee17d7f05 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 13:15:17 +0000
|
||||||
|
Subject: [PATCH 07/10] Allow non-logical expressions in IF statements
|
||||||
|
|
||||||
|
Use -fdec-non-logical-if to enable feature. Also enabled using -fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 4 ++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
gcc/fortran/resolve.c | 60 ++++++++++++++++---
|
||||||
|
...gical_expressions_if_statements_blocks_1.f | 25 ++++++++
|
||||||
|
...gical_expressions_if_statements_blocks_2.f | 25 ++++++++
|
||||||
|
...gical_expressions_if_statements_blocks_3.f | 25 ++++++++
|
||||||
|
...gical_expressions_if_statements_blocks_4.f | 45 ++++++++++++++
|
||||||
|
...gical_expressions_if_statements_blocks_5.f | 45 ++++++++++++++
|
||||||
|
...gical_expressions_if_statements_blocks_6.f | 45 ++++++++++++++
|
||||||
|
9 files changed, 266 insertions(+), 9 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 4a269ebb22d..d886c2f33ed 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -497,6 +497,10 @@ fdec-override-kind
|
||||||
|
Fortran Var(flag_dec_override_kind)
|
||||||
|
Enable support for per variable kind specification.
|
||||||
|
|
||||||
|
+fdec-non-logical-if
|
||||||
|
+Fortran Var(flag_dec_non_logical_if)
|
||||||
|
+Enable support for non-logical expressions in if statements.
|
||||||
|
+
|
||||||
|
fdec-old-init
|
||||||
|
Fortran Var(flag_dec_old_init)
|
||||||
|
Enable support for old style initializers in derived types.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index edbab483b36..a946c86790a 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -81,6 +81,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_non_integer_index, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_old_init, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_override_kind, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_non_logical_if, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||||
|
index bc0df0fdb99..07dd039f3bf 100644
|
||||||
|
--- a/gcc/fortran/resolve.c
|
||||||
|
+++ b/gcc/fortran/resolve.c
|
||||||
|
@@ -10789,10 +10789,31 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
|
||||||
|
switch (b->op)
|
||||||
|
{
|
||||||
|
case EXEC_IF:
|
||||||
|
- if (t && b->expr1 != NULL
|
||||||
|
- && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
|
||||||
|
- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
|
||||||
|
- &b->expr1->where);
|
||||||
|
+ if (t && b->expr1 != NULL)
|
||||||
|
+ {
|
||||||
|
+ if (flag_dec_non_logical_if && b->expr1->ts.type != BT_LOGICAL)
|
||||||
|
+ {
|
||||||
|
+ gfc_expr* cast;
|
||||||
|
+ cast = gfc_ne (b->expr1,
|
||||||
|
+ gfc_get_int_expr (1, &gfc_current_locus, 0),
|
||||||
|
+ INTRINSIC_NE);
|
||||||
|
+ if (cast == NULL)
|
||||||
|
+ gfc_internal_error ("gfc_resolve_blocks(): Failed to cast "
|
||||||
|
+ "to LOGICAL in IF");
|
||||||
|
+ b->expr1 = cast;
|
||||||
|
+ if (warn_conversion_extra)
|
||||||
|
+ {
|
||||||
|
+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
|
||||||
|
+ " IF statement condition %L will be true if"
|
||||||
|
+ " it evaluates to nonzero",
|
||||||
|
+ &b->expr1->where);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
|
||||||
|
+ gfc_error ("IF clause at %L requires a scalar LOGICAL "
|
||||||
|
+ "expression", &b->expr1->where);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXEC_WHERE:
|
||||||
|
@@ -12093,11 +12114,32 @@ start:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXEC_IF:
|
||||||
|
- if (t && code->expr1 != NULL
|
||||||
|
- && (code->expr1->ts.type != BT_LOGICAL
|
||||||
|
- || code->expr1->rank != 0))
|
||||||
|
- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
|
||||||
|
- &code->expr1->where);
|
||||||
|
+ if (t && code->expr1 != NULL)
|
||||||
|
+ {
|
||||||
|
+ if (flag_dec_non_logical_if
|
||||||
|
+ && code->expr1->ts.type != BT_LOGICAL)
|
||||||
|
+ {
|
||||||
|
+ gfc_expr* cast;
|
||||||
|
+ cast = gfc_ne (code->expr1,
|
||||||
|
+ gfc_get_int_expr (1, &gfc_current_locus, 0),
|
||||||
|
+ INTRINSIC_NE);
|
||||||
|
+ if (cast == NULL)
|
||||||
|
+ gfc_internal_error ("gfc_resolve_code(): Failed to cast "
|
||||||
|
+ "to LOGICAL in IF");
|
||||||
|
+ code->expr1 = cast;
|
||||||
|
+ if (warn_conversion_extra)
|
||||||
|
+ {
|
||||||
|
+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
|
||||||
|
+ " IF statement condition %L will be true if"
|
||||||
|
+ " it evaluates to nonzero",
|
||||||
|
+ &code->expr1->where);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank != 0)
|
||||||
|
+ gfc_error ("IF clause at %L requires a scalar LOGICAL "
|
||||||
|
+ "expression", &code->expr1->where);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXEC_CALL:
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..0101db893ca
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec -Wconversion-extra" }
|
||||||
|
+!
|
||||||
|
+! Allow logical expressions in if statements and blocks
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM logical_exp_if_st_bl
|
||||||
|
+ INTEGER ipos/1/
|
||||||
|
+ INTEGER ineg/0/
|
||||||
|
+
|
||||||
|
+ ! Test non logical variables
|
||||||
|
+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if statements
|
||||||
|
+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if blocks
|
||||||
|
+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ STOP 4
|
||||||
|
+ endif
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..876f4e09508
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
|
||||||
|
+!
|
||||||
|
+! Allow logical expressions in if statements and blocks
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM logical_exp_if_st_bl
|
||||||
|
+ INTEGER ipos/1/
|
||||||
|
+ INTEGER ineg/0/
|
||||||
|
+
|
||||||
|
+ ! Test non logical variables
|
||||||
|
+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if statements
|
||||||
|
+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if blocks
|
||||||
|
+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ STOP 4
|
||||||
|
+ endif
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..35cb4c51b8d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-non-logical-if" }
|
||||||
|
+!
|
||||||
|
+! Allow logical expressions in if statements and blocks
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM logical_exp_if_st_bl
|
||||||
|
+ INTEGER ipos/1/
|
||||||
|
+ INTEGER ineg/0/
|
||||||
|
+
|
||||||
|
+ ! Test non logical variables
|
||||||
|
+ if (ineg) STOP 1 ! { dg-error "IF clause at" }
|
||||||
|
+ if (0) STOP 2 ! { dg-error "IF clause at" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if statements
|
||||||
|
+ if (MOD(ipos, 1)) STOP 3 ! { dg-error "IF clause at" }
|
||||||
|
+
|
||||||
|
+ ! Test non logical expressions in if blocks
|
||||||
|
+ if (MOD(2 * ipos, 2)) then ! { dg-error "IF clause at" }
|
||||||
|
+ STOP 4
|
||||||
|
+ endif
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..7b60b60827f
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
|
||||||
|
@@ -0,0 +1,45 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec -Wconversion-extra" }
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ function othersub1()
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ othersub1 = 9
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ function othersub2()
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ othersub2 = 0
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ program MAIN
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ integer a /1/
|
||||||
|
+ integer b /2/
|
||||||
|
+
|
||||||
|
+ if (othersub1()) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 1
|
||||||
|
+ end if
|
||||||
|
+ if (othersub2()) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ stop 2
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ if (a-b) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 3
|
||||||
|
+ end if
|
||||||
|
+ if (b-(a+1)) then ! { dg-warning "if it evaluates to nonzero" }
|
||||||
|
+ stop 3
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..80336f48ca1
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
|
||||||
|
@@ -0,0 +1,45 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ function othersub1()
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ othersub1 = 9
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ function othersub2()
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ othersub2 = 0
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ program MAIN
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ integer a /1/
|
||||||
|
+ integer b /2/
|
||||||
|
+
|
||||||
|
+ if (othersub1()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 1
|
||||||
|
+ end if
|
||||||
|
+ if (othersub2()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
|
||||||
|
+ stop 2
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ if (a-b) then ! { dg-warning "Non-LOGICAL type in IF statement" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 3
|
||||||
|
+ end if
|
||||||
|
+ if (b-(a+1)) then ! { dg-warning "Non-LOGICAL type in IF statement" }
|
||||||
|
+ stop 3
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..e1125ca717a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
|
||||||
|
@@ -0,0 +1,45 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-non-logical-if" }
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchema@codethink.co.uk>
|
||||||
|
+! and Jeff Law <law@redhat.com>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ function othersub1()
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ othersub1 = 9
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ function othersub2()
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ othersub2 = 0
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
+ program MAIN
|
||||||
|
+ integer*4 othersub1
|
||||||
|
+ integer*4 othersub2
|
||||||
|
+ integer a /1/
|
||||||
|
+ integer b /2/
|
||||||
|
+
|
||||||
|
+ if (othersub1()) then ! { dg-error "IF clause at" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 1
|
||||||
|
+ end if
|
||||||
|
+ if (othersub2()) then ! { dg-error "IF clause at" }
|
||||||
|
+ stop 2
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ if (a-b) then ! { dg-error "IF clause at" }
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ else
|
||||||
|
+ stop 3
|
||||||
|
+ end if
|
||||||
|
+ if (b-(a+1)) then ! { dg-error "IF clause at" }
|
||||||
|
+ stop 3
|
||||||
|
+ else
|
||||||
|
+ write(*,*) "OK"
|
||||||
|
+ end if
|
||||||
|
+ end
|
||||||
|
+
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
185
SOURCES/gcc11-fortran-fdec-old-init.patch
Normal file
185
SOURCES/gcc11-fortran-fdec-old-init.patch
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
From 8bcc0f85ed1718c0dd9033ad4a34df181aabaffe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 13:11:06 +0000
|
||||||
|
Subject: [PATCH 05/10] Allow old-style initializers in derived types
|
||||||
|
|
||||||
|
This allows simple declarations in derived types and structures, such as:
|
||||||
|
LOGICAL*1 NIL /0/
|
||||||
|
Only single value expressions are allowed at the moment.
|
||||||
|
|
||||||
|
Use -fdec-old-init to enable. Also enabled by -fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/decl.c | 27 +++++++++++++++----
|
||||||
|
gcc/fortran/lang.opt | 4 +++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
...ec_derived_types_initialised_old_style_1.f | 25 +++++++++++++++++
|
||||||
|
...ec_derived_types_initialised_old_style_2.f | 25 +++++++++++++++++
|
||||||
|
...ec_derived_types_initialised_old_style_3.f | 26 ++++++++++++++++++
|
||||||
|
6 files changed, 103 insertions(+), 5 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_3.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
|
||||||
|
index 723915822f3..5c8c1b7981b 100644
|
||||||
|
--- a/gcc/fortran/decl.c
|
||||||
|
+++ b/gcc/fortran/decl.c
|
||||||
|
@@ -2827,12 +2827,29 @@ variable_decl (int elem)
|
||||||
|
but not components of derived types. */
|
||||||
|
else if (gfc_current_state () == COMP_DERIVED)
|
||||||
|
{
|
||||||
|
- gfc_error ("Invalid old style initialization for derived type "
|
||||||
|
- "component at %C");
|
||||||
|
- m = MATCH_ERROR;
|
||||||
|
- goto cleanup;
|
||||||
|
+ if (flag_dec_old_init)
|
||||||
|
+ {
|
||||||
|
+ /* Attempt to match an old-style initializer which is a simple
|
||||||
|
+ integer or character expression; this will not work with
|
||||||
|
+ multiple values. */
|
||||||
|
+ m = gfc_match_init_expr (&initializer);
|
||||||
|
+ if (m == MATCH_ERROR)
|
||||||
|
+ goto cleanup;
|
||||||
|
+ else if (m == MATCH_YES)
|
||||||
|
+ {
|
||||||
|
+ m = gfc_match ("/");
|
||||||
|
+ if (m != MATCH_YES)
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ gfc_error ("Invalid old style initialization for derived type "
|
||||||
|
+ "component at %C");
|
||||||
|
+ m = MATCH_ERROR;
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
-
|
||||||
|
/* For structure components, read the initializer as a special
|
||||||
|
expression and let the rest of this function apply the initializer
|
||||||
|
as usual. */
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index d527c106bd6..25cc948699b 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -493,6 +493,10 @@ fdec-non-integer-index
|
||||||
|
Fortran Var(flag_dec_non_integer_index)
|
||||||
|
Enable support for non-integer substring indexes.
|
||||||
|
|
||||||
|
+fdec-old-init
|
||||||
|
+Fortran Var(flag_dec_old_init)
|
||||||
|
+Enable support for old style initializers in derived types.
|
||||||
|
+
|
||||||
|
fdec-structure
|
||||||
|
Fortran Var(flag_dec_structure)
|
||||||
|
Enable support for DEC STRUCTURE/RECORD.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index 9a042f64881..d6bd36c3a8a 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -79,6 +79,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_char_conversions, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_duplicates, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_non_integer_index, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_old_init, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_1.f b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..eac4f9bfcf1
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_1.f
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test old style initializers in derived types
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM spec_in_var
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID /8/
|
||||||
|
+ INTEGER*4 TYPE /5/
|
||||||
|
+ INTEGER*8 DEFVAL /0/
|
||||||
|
+ CHARACTER*(5) NAME /'tests'/
|
||||||
|
+ LOGICAL*1 NIL /0/
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+
|
||||||
|
+ TYPE (STRUCT1) SINST
|
||||||
|
+
|
||||||
|
+ IF(SINST%ID.NE.8) STOP 1
|
||||||
|
+ IF(SINST%TYPE.NE.5) STOP 2
|
||||||
|
+ IF(SINST%DEFVAL.NE.0) STOP 3
|
||||||
|
+ IF(SINST%NAME.NE.'tests') STOP 4
|
||||||
|
+ IF(SINST%NIL) STOP 5
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_2.f b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..d904c8b2974
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_2.f
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-std=legacy -fdec-old-init" }
|
||||||
|
+!
|
||||||
|
+! Test old style initializers in derived types
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM spec_in_var
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID /8/
|
||||||
|
+ INTEGER*4 TYPE /5/
|
||||||
|
+ INTEGER*8 DEFVAL /0/
|
||||||
|
+ CHARACTER*(5) NAME /'tests'/
|
||||||
|
+ LOGICAL*1 NIL /0/
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+
|
||||||
|
+ TYPE (STRUCT1) SINST
|
||||||
|
+
|
||||||
|
+ IF(SINST%ID.NE.8) STOP 1
|
||||||
|
+ IF(SINST%TYPE.NE.5) STOP 2
|
||||||
|
+ IF(SINST%DEFVAL.NE.0) STOP 3
|
||||||
|
+ IF(SINST%NAME.NE.'tests') STOP 4
|
||||||
|
+ IF(SINST%NIL) STOP 5
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_3.f b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..58c2b4b66cf
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style_3.f
|
||||||
|
@@ -0,0 +1,26 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-std=legacy -fdec -fno-dec-old-init" }
|
||||||
|
+!
|
||||||
|
+! Test old style initializers in derived types
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+
|
||||||
|
+ PROGRAM spec_in_var
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID /8/ ! { dg-error "Invalid old style initialization" }
|
||||||
|
+ INTEGER*4 TYPE /5/ ! { dg-error "Invalid old style initialization" }
|
||||||
|
+ INTEGER*8 DEFVAL /0/ ! { dg-error "Invalid old style initialization" }
|
||||||
|
+ CHARACTER*(5) NAME /'tests'/ ! { dg-error "Invalid old style initialization" }
|
||||||
|
+ LOGICAL*1 NIL /0/ ! { dg-error "Invalid old style initialization" }
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+
|
||||||
|
+ TYPE (STRUCT1) SINST
|
||||||
|
+
|
||||||
|
+ IF(SINST%ID.NE.8) STOP 1 ! { dg-error "'id' at \\(1\\) is not a member" }
|
||||||
|
+ IF(SINST%TYPE.NE.5) STOP 2 ! { dg-error "'type' at \\(1\\) is not a member" }
|
||||||
|
+ IF(SINST%DEFVAL.NE.0) STOP 3 ! { dg-error "'defval' at \\(1\\) is not a member" }
|
||||||
|
+ IF(SINST%NAME.NE.'tests') STOP 4 ! { dg-error "'name' at \\(1\\) is not a member" }
|
||||||
|
+ IF(SINST%NIL) STOP 5 ! { dg-error "'nil' at \\(1\\) is not a member" }
|
||||||
|
+ END
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
588
SOURCES/gcc11-fortran-fdec-override-kind.patch
Normal file
588
SOURCES/gcc11-fortran-fdec-override-kind.patch
Normal file
@ -0,0 +1,588 @@
|
|||||||
|
From 786869fd62813e80da9b6545a295d53c36275c19 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 13:12:14 +0000
|
||||||
|
Subject: [PATCH 06/10] Allow string length and kind to be specified on a per
|
||||||
|
variable basis.
|
||||||
|
|
||||||
|
This allows kind/length to be mixed with array specification in
|
||||||
|
declarations.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
INTEGER*4 x*2, y*8
|
||||||
|
CHARACTER names*20(10)
|
||||||
|
REAL v(100)*8, vv*4(50)
|
||||||
|
|
||||||
|
The per-variable size overrides the kind or length specified for the type.
|
||||||
|
|
||||||
|
Use -fdec-override-kind to enable. Also enabled by -fdec.
|
||||||
|
|
||||||
|
Note: this feature is a merger of two previously separate features.
|
||||||
|
|
||||||
|
Now accepts named constants as kind parameters:
|
||||||
|
|
||||||
|
INTEGER A
|
||||||
|
PARAMETER (A=2)
|
||||||
|
INTEGER B*(A)
|
||||||
|
|
||||||
|
Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
|
||||||
|
Now rejects invalid kind parameters and prints error messages:
|
||||||
|
|
||||||
|
INTEGER X*3
|
||||||
|
|
||||||
|
caused an internal compiler error.
|
||||||
|
|
||||||
|
Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
---
|
||||||
|
gcc/fortran/decl.c | 156 ++++++++++++++----
|
||||||
|
gcc/fortran/lang.opt | 4 +
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
.../dec_mixed_char_array_declaration_1.f | 13 ++
|
||||||
|
.../dec_mixed_char_array_declaration_2.f | 13 ++
|
||||||
|
.../dec_mixed_char_array_declaration_3.f | 13 ++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_1.f | 31 ++++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_2.f | 31 ++++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_3.f | 31 ++++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_4.f | 14 ++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_5.f | 19 +++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_6.f | 19 +++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_7.f | 15 ++
|
||||||
|
.../gfortran.dg/dec_spec_in_variable_8.f | 14 ++
|
||||||
|
14 files changed, 340 insertions(+), 34 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
|
||||||
|
index 5c8c1b7981b..f7dc9d8263d 100644
|
||||||
|
--- a/gcc/fortran/decl.c
|
||||||
|
+++ b/gcc/fortran/decl.c
|
||||||
|
@@ -1213,6 +1213,54 @@ syntax:
|
||||||
|
return MATCH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* This matches the nonstandard kind given after a variable name, like:
|
||||||
|
+ INTEGER x*2, y*4
|
||||||
|
+ The per-variable kind will override any kind given in the type
|
||||||
|
+ declaration.
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+static match
|
||||||
|
+match_per_symbol_kind (int *length)
|
||||||
|
+{
|
||||||
|
+ match m;
|
||||||
|
+ gfc_expr *expr = NULL;
|
||||||
|
+
|
||||||
|
+ m = gfc_match_char ('*');
|
||||||
|
+ if (m != MATCH_YES)
|
||||||
|
+ return m;
|
||||||
|
+
|
||||||
|
+ m = gfc_match_small_literal_int (length, NULL);
|
||||||
|
+ if (m == MATCH_YES || m == MATCH_ERROR)
|
||||||
|
+ return m;
|
||||||
|
+
|
||||||
|
+ if (gfc_match_char ('(') == MATCH_NO)
|
||||||
|
+ return MATCH_ERROR;
|
||||||
|
+
|
||||||
|
+ m = gfc_match_expr (&expr);
|
||||||
|
+ if (m == MATCH_YES)
|
||||||
|
+ {
|
||||||
|
+ m = MATCH_ERROR; // Assume error
|
||||||
|
+ if (gfc_expr_check_typed (expr, gfc_current_ns, false))
|
||||||
|
+ {
|
||||||
|
+ if ((expr->expr_type == EXPR_CONSTANT)
|
||||||
|
+ && (expr->ts.type == BT_INTEGER))
|
||||||
|
+ {
|
||||||
|
+ *length = mpz_get_si(expr->value.integer);
|
||||||
|
+ m = MATCH_YES;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (m == MATCH_YES)
|
||||||
|
+ {
|
||||||
|
+ if (gfc_match_char (')') == MATCH_NO)
|
||||||
|
+ m = MATCH_ERROR;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (expr != NULL)
|
||||||
|
+ gfc_free_expr (expr);
|
||||||
|
+ return m;
|
||||||
|
+}
|
||||||
|
|
||||||
|
/* Special subroutine for finding a symbol. Check if the name is found
|
||||||
|
in the current name space. If not, and we're compiling a function or
|
||||||
|
@@ -2443,6 +2491,35 @@ check_function_name (char *name)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+static match
|
||||||
|
+match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem)
|
||||||
|
+{
|
||||||
|
+ gfc_expr* char_len;
|
||||||
|
+ char_len = NULL;
|
||||||
|
+
|
||||||
|
+ match m = match_char_length (&char_len, cl_deferred, false);
|
||||||
|
+ if (m == MATCH_YES)
|
||||||
|
+ {
|
||||||
|
+ *cl = gfc_new_charlen (gfc_current_ns, NULL);
|
||||||
|
+ (*cl)->length = char_len;
|
||||||
|
+ }
|
||||||
|
+ else if (m == MATCH_NO)
|
||||||
|
+ {
|
||||||
|
+ if (elem > 1
|
||||||
|
+ && (current_ts.u.cl->length == NULL
|
||||||
|
+ || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
|
||||||
|
+ {
|
||||||
|
+ *cl = gfc_new_charlen (gfc_current_ns, NULL);
|
||||||
|
+ (*cl)->length = gfc_copy_expr (current_ts.u.cl->length);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ *cl = current_ts.u.cl;
|
||||||
|
+
|
||||||
|
+ *cl_deferred = current_ts.deferred;
|
||||||
|
+ }
|
||||||
|
+ return m;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Match a variable name with an optional initializer. When this
|
||||||
|
subroutine is called, a variable is expected to be parsed next.
|
||||||
|
Depending on what is happening at the moment, updates either the
|
||||||
|
@@ -2453,7 +2530,7 @@ variable_decl (int elem)
|
||||||
|
{
|
||||||
|
char name[GFC_MAX_SYMBOL_LEN + 1];
|
||||||
|
static unsigned int fill_id = 0;
|
||||||
|
- gfc_expr *initializer, *char_len;
|
||||||
|
+ gfc_expr *initializer;
|
||||||
|
gfc_array_spec *as;
|
||||||
|
gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */
|
||||||
|
gfc_charlen *cl;
|
||||||
|
@@ -2462,11 +2539,15 @@ variable_decl (int elem)
|
||||||
|
match m;
|
||||||
|
bool t;
|
||||||
|
gfc_symbol *sym;
|
||||||
|
+ match cl_match;
|
||||||
|
+ match kind_match;
|
||||||
|
+ int overridden_kind;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
initializer = NULL;
|
||||||
|
as = NULL;
|
||||||
|
cp_as = NULL;
|
||||||
|
+ kind_match = MATCH_NO;
|
||||||
|
|
||||||
|
/* When we get here, we've just matched a list of attributes and
|
||||||
|
maybe a type and a double colon. The next thing we expect to see
|
||||||
|
@@ -2519,6 +2600,28 @@ variable_decl (int elem)
|
||||||
|
|
||||||
|
var_locus = gfc_current_locus;
|
||||||
|
|
||||||
|
+
|
||||||
|
+ cl = NULL;
|
||||||
|
+ cl_deferred = false;
|
||||||
|
+ cl_match = MATCH_NO;
|
||||||
|
+
|
||||||
|
+ /* Check for a character length clause before an array clause */
|
||||||
|
+ if (flag_dec_override_kind)
|
||||||
|
+ {
|
||||||
|
+ if (current_ts.type == BT_CHARACTER)
|
||||||
|
+ {
|
||||||
|
+ cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
|
||||||
|
+ if (cl_match == MATCH_ERROR)
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ kind_match = match_per_symbol_kind (&overridden_kind);
|
||||||
|
+ if (kind_match == MATCH_ERROR)
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Now we could see the optional array spec. or character length. */
|
||||||
|
m = gfc_match_array_spec (&as, true, true);
|
||||||
|
if (m == MATCH_ERROR)
|
||||||
|
@@ -2667,40 +2770,12 @@ variable_decl (int elem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- char_len = NULL;
|
||||||
|
- cl = NULL;
|
||||||
|
- cl_deferred = false;
|
||||||
|
-
|
||||||
|
- if (current_ts.type == BT_CHARACTER)
|
||||||
|
+ /* Second chance for a character length clause */
|
||||||
|
+ if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER)
|
||||||
|
{
|
||||||
|
- switch (match_char_length (&char_len, &cl_deferred, false))
|
||||||
|
- {
|
||||||
|
- case MATCH_YES:
|
||||||
|
- cl = gfc_new_charlen (gfc_current_ns, NULL);
|
||||||
|
-
|
||||||
|
- cl->length = char_len;
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- /* Non-constant lengths need to be copied after the first
|
||||||
|
- element. Also copy assumed lengths. */
|
||||||
|
- case MATCH_NO:
|
||||||
|
- if (elem > 1
|
||||||
|
- && (current_ts.u.cl->length == NULL
|
||||||
|
- || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
|
||||||
|
- {
|
||||||
|
- cl = gfc_new_charlen (gfc_current_ns, NULL);
|
||||||
|
- cl->length = gfc_copy_expr (current_ts.u.cl->length);
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- cl = current_ts.u.cl;
|
||||||
|
-
|
||||||
|
- cl_deferred = current_ts.deferred;
|
||||||
|
-
|
||||||
|
- break;
|
||||||
|
-
|
||||||
|
- case MATCH_ERROR:
|
||||||
|
- goto cleanup;
|
||||||
|
- }
|
||||||
|
+ m = match_character_length_clause (&cl, &cl_deferred, elem);
|
||||||
|
+ if (m == MATCH_ERROR)
|
||||||
|
+ goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The dummy arguments and result of the abreviated form of MODULE
|
||||||
|
@@ -2802,6 +2877,19 @@ variable_decl (int elem)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (kind_match == MATCH_YES)
|
||||||
|
+ {
|
||||||
|
+ gfc_find_symbol (name, gfc_current_ns, 1, &sym);
|
||||||
|
+ /* sym *must* be found at this point */
|
||||||
|
+ sym->ts.kind = overridden_kind;
|
||||||
|
+ if (gfc_validate_kind (sym->ts.type, sym->ts.kind, true) < 0)
|
||||||
|
+ {
|
||||||
|
+ gfc_error ("Kind %d not supported for type %s at %C",
|
||||||
|
+ sym->ts.kind, gfc_basic_typename (sym->ts.type));
|
||||||
|
+ return MATCH_ERROR;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!check_function_name (name))
|
||||||
|
{
|
||||||
|
m = MATCH_ERROR;
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 25cc948699b..4a269ebb22d 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -493,6 +493,10 @@ fdec-non-integer-index
|
||||||
|
Fortran Var(flag_dec_non_integer_index)
|
||||||
|
Enable support for non-integer substring indexes.
|
||||||
|
|
||||||
|
+fdec-override-kind
|
||||||
|
+Fortran Var(flag_dec_override_kind)
|
||||||
|
+Enable support for per variable kind specification.
|
||||||
|
+
|
||||||
|
fdec-old-init
|
||||||
|
Fortran Var(flag_dec_old_init)
|
||||||
|
Enable support for old style initializers in derived types.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index d6bd36c3a8a..edbab483b36 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -80,6 +80,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_duplicates, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_non_integer_index, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_old_init, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_override_kind, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..706ea4112a4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test character declaration with mixed string length and array specification
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM character_declaration
|
||||||
|
+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
|
||||||
|
+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
|
||||||
|
+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..26d2acf01de
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test character declaration with mixed string length and array specification
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM character_declaration
|
||||||
|
+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
|
||||||
|
+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
|
||||||
|
+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..76e4f0bdb93
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec-override-kind -fno-dec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test character declaration with mixed string length and array specification
|
||||||
|
+!
|
||||||
|
+! Contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM character_declaration
|
||||||
|
+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ! { dg-error "Syntax error" }
|
||||||
|
+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
|
||||||
|
+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ! { dg-error " Operands of comparison operator" }
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..edd0f5874b7
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer*8 ai*1, bi*4, ci
|
||||||
|
+ real*4 ar*4, br*8, cr
|
||||||
|
+
|
||||||
|
+ ai = 1
|
||||||
|
+ ar = 1.0
|
||||||
|
+ bi = 2
|
||||||
|
+ br = 2.0
|
||||||
|
+ ci = 3
|
||||||
|
+ cr = 3.0
|
||||||
|
+
|
||||||
|
+ if (ai .ne. 1) stop 1
|
||||||
|
+ if (abs(ar - 1.0) > 1.0D-6) stop 2
|
||||||
|
+ if (bi .ne. 2) stop 3
|
||||||
|
+ if (abs(br - 2.0) > 1.0D-6) stop 4
|
||||||
|
+ if (ci .ne. 3) stop 5
|
||||||
|
+ if (abs(cr - 3.0) > 1.0D-6) stop 6
|
||||||
|
+ if (kind(ai) .ne. 1) stop 7
|
||||||
|
+ if (kind(ar) .ne. 4) stop 8
|
||||||
|
+ if (kind(bi) .ne. 4) stop 9
|
||||||
|
+ if (kind(br) .ne. 8) stop 10
|
||||||
|
+ if (kind(ci) .ne. 8) stop 11
|
||||||
|
+ if (kind(cr) .ne. 4) stop 12
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..bfaba584dbb
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer*8 ai*1, bi*4, ci
|
||||||
|
+ real*4 ar*4, br*8, cr
|
||||||
|
+
|
||||||
|
+ ai = 1
|
||||||
|
+ ar = 1.0
|
||||||
|
+ bi = 2
|
||||||
|
+ br = 2.0
|
||||||
|
+ ci = 3
|
||||||
|
+ cr = 3.0
|
||||||
|
+
|
||||||
|
+ if (ai .ne. 1) stop 1
|
||||||
|
+ if (abs(ar - 1.0) > 1.0D-6) stop 2
|
||||||
|
+ if (bi .ne. 2) stop 3
|
||||||
|
+ if (abs(br - 2.0) > 1.0D-6) stop 4
|
||||||
|
+ if (ci .ne. 3) stop 5
|
||||||
|
+ if (abs(cr - 3.0) > 1.0D-6) stop 6
|
||||||
|
+ if (kind(ai) .ne. 1) stop 7
|
||||||
|
+ if (kind(ar) .ne. 4) stop 8
|
||||||
|
+ if (kind(bi) .ne. 4) stop 9
|
||||||
|
+ if (kind(br) .ne. 8) stop 10
|
||||||
|
+ if (kind(ci) .ne. 8) stop 11
|
||||||
|
+ if (kind(cr) .ne. 4) stop 12
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..5ff434e7466
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer*8 ai*1, bi*4, ci ! { dg-error "Syntax error" }
|
||||||
|
+ real*4 ar*4, br*8, cr ! { dg-error "Syntax error" }
|
||||||
|
+
|
||||||
|
+ ai = 1
|
||||||
|
+ ar = 1.0
|
||||||
|
+ bi = 2
|
||||||
|
+ br = 2.0
|
||||||
|
+ ci = 3
|
||||||
|
+ cr = 3.0
|
||||||
|
+
|
||||||
|
+ if (ai .ne. 1) stop 1
|
||||||
|
+ if (abs(ar - 1.0) > 1.0D-6) stop 2
|
||||||
|
+ if (bi .ne. 2) stop 3
|
||||||
|
+ if (abs(br - 2.0) > 1.0D-6) stop 4
|
||||||
|
+ if (ci .ne. 3) stop 5
|
||||||
|
+ if (abs(cr - 3.0) > 1.0D-6) stop 6
|
||||||
|
+ if (kind(ai) .ne. 1) stop 7
|
||||||
|
+ if (kind(ar) .ne. 4) stop 8
|
||||||
|
+ if (kind(bi) .ne. 4) stop 9
|
||||||
|
+ if (kind(br) .ne. 8) stop 10
|
||||||
|
+ if (kind(ci) .ne. 8) stop 11
|
||||||
|
+ if (kind(cr) .ne. 4) stop 12
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..c01980e8b9d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
|
||||||
|
@@ -0,0 +1,14 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type. The per variable
|
||||||
|
+! kind specification is not enabled so these should fail
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer a
|
||||||
|
+ parameter(a=2)
|
||||||
|
+ integer b*(a) ! { dg-error "Syntax error" }
|
||||||
|
+ real c*(8) ! { dg-error "Syntax error" }
|
||||||
|
+ logical d*1_1 ! { dg-error "Syntax error" }
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..e2f39da3f4f
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
|
||||||
|
@@ -0,0 +1,19 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer a
|
||||||
|
+ parameter(a=2)
|
||||||
|
+ integer b*(a)
|
||||||
|
+ real c*(8)
|
||||||
|
+ logical d*(1_1)
|
||||||
|
+ character e*(a)
|
||||||
|
+ if (kind(b).ne.2) stop 1
|
||||||
|
+ if (kind(c).ne.8) stop 2
|
||||||
|
+ if (kind(d).ne.1) stop 3
|
||||||
|
+ if (len(e).ne.2) stop 4
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..569747874e3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
|
||||||
|
@@ -0,0 +1,19 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer a
|
||||||
|
+ parameter(a=2)
|
||||||
|
+ integer b*(a)
|
||||||
|
+ real c*(8)
|
||||||
|
+ logical d*(1_1)
|
||||||
|
+ character e*(a)
|
||||||
|
+ if (kind(b).ne.2) stop 1
|
||||||
|
+ if (kind(c).ne.8) stop 2
|
||||||
|
+ if (kind(d).ne.1) stop 3
|
||||||
|
+ if (len(e).ne.2) stop 4
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..b975bfd15c5
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-override-kind" }
|
||||||
|
+!
|
||||||
|
+! Test kind specification in variable not in type as the per variable
|
||||||
|
+! kind specification is not enables these should fail
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer a
|
||||||
|
+ parameter(a=2)
|
||||||
|
+ integer b*(a) ! { dg-error "Syntax error" }
|
||||||
|
+ real c*(8) ! { dg-error "Syntax error" }
|
||||||
|
+ logical d*1_1 ! { dg-error "Syntax error" }
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..85732e0bd85
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
|
||||||
|
@@ -0,0 +1,14 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Check that invalid kind values are rejected.
|
||||||
|
+!
|
||||||
|
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ program spec_in_var
|
||||||
|
+ integer a
|
||||||
|
+ parameter(a=3)
|
||||||
|
+ integer b*(a) ! { dg-error "Kind 3 not supported" }
|
||||||
|
+ real c*(78) ! { dg-error "Kind 78 not supported" }
|
||||||
|
+ logical d*(*) ! { dg-error "Invalid character" }
|
||||||
|
+ end
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
2093
SOURCES/gcc11-fortran-fdec-promotion.patch
Normal file
2093
SOURCES/gcc11-fortran-fdec-promotion.patch
Normal file
File diff suppressed because it is too large
Load Diff
262
SOURCES/gcc11-fortran-fdec-sequence.patch
Normal file
262
SOURCES/gcc11-fortran-fdec-sequence.patch
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
From bb76446db10c21860a4e19569ce3e350d8a2b59f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 15:00:44 +0000
|
||||||
|
Subject: [PATCH 09/10] Add the SEQUENCE attribute by default if it's not
|
||||||
|
present.
|
||||||
|
|
||||||
|
Use -fdec-sequence to enable this feature. Also enabled by -fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 4 ++
|
||||||
|
gcc/fortran/options.c | 1 +
|
||||||
|
gcc/fortran/resolve.c | 13 ++++-
|
||||||
|
...dd_SEQUENCE_to_COMMON_block_by_default_1.f | 57 +++++++++++++++++++
|
||||||
|
...dd_SEQUENCE_to_COMMON_block_by_default_2.f | 57 +++++++++++++++++++
|
||||||
|
...dd_SEQUENCE_to_COMMON_block_by_default_3.f | 57 +++++++++++++++++++
|
||||||
|
6 files changed, 186 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_3.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 4ca2f93f2df..019c798cf09 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -509,6 +509,10 @@ fdec-promotion
|
||||||
|
Fortran Var(flag_dec_promotion)
|
||||||
|
Add support for type promotion in intrinsic arguments.
|
||||||
|
|
||||||
|
+fdec-sequence
|
||||||
|
+Fortran Var(flag_dec_sequence)
|
||||||
|
+Add the SEQUENCE attribute by default if it's not present.
|
||||||
|
+
|
||||||
|
fdec-structure
|
||||||
|
Fortran Var(flag_dec_structure)
|
||||||
|
Enable support for DEC STRUCTURE/RECORD.
|
||||||
|
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||||
|
index 15079c7e95a..050f56fdc25 100644
|
||||||
|
--- a/gcc/fortran/options.c
|
||||||
|
+++ b/gcc/fortran/options.c
|
||||||
|
@@ -83,6 +83,7 @@ set_dec_flags (int value)
|
||||||
|
SET_BITFLAG (flag_dec_override_kind, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_non_logical_if, value, value);
|
||||||
|
SET_BITFLAG (flag_dec_promotion, value, value);
|
||||||
|
+ SET_BITFLAG (flag_dec_sequence, value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finalize DEC flags. */
|
||||||
|
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||||
|
index 07dd039f3bf..fe7d0cc5944 100644
|
||||||
|
--- a/gcc/fortran/resolve.c
|
||||||
|
+++ b/gcc/fortran/resolve.c
|
||||||
|
@@ -978,9 +978,16 @@ resolve_common_vars (gfc_common_head *common_block, bool named_common)
|
||||||
|
|
||||||
|
if (!(csym->ts.u.derived->attr.sequence
|
||||||
|
|| csym->ts.u.derived->attr.is_bind_c))
|
||||||
|
- gfc_error_now ("Derived type variable %qs in COMMON at %L "
|
||||||
|
- "has neither the SEQUENCE nor the BIND(C) "
|
||||||
|
- "attribute", csym->name, &csym->declared_at);
|
||||||
|
+ {
|
||||||
|
+ if (flag_dec_sequence)
|
||||||
|
+ /* Assume sequence. */
|
||||||
|
+ csym->ts.u.derived->attr.sequence = 1;
|
||||||
|
+ else
|
||||||
|
+ gfc_error_now ("Derived type variable '%s' in COMMON at %L "
|
||||||
|
+ "has neither the SEQUENCE nor the BIND(C) "
|
||||||
|
+ "attribute", csym->name, &csym->declared_at);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (csym->ts.u.derived->attr.alloc_comp)
|
||||||
|
gfc_error_now ("Derived type variable %qs in COMMON at %L "
|
||||||
|
"has an ultimate component that is "
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_1.f b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..fe7b39625eb
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_1.f
|
||||||
|
@@ -0,0 +1,57 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec" }
|
||||||
|
+!
|
||||||
|
+! Test add default SEQUENCE attribute derived types appearing in
|
||||||
|
+! COMMON blocks and EQUIVALENCE statements.
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ MODULE SEQ
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID
|
||||||
|
+ INTEGER*4 TYPE
|
||||||
|
+ INTEGER*8 DEFVAL
|
||||||
|
+ CHARACTER*(4) NAME
|
||||||
|
+ LOGICAL*1 NIL
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+ END MODULE
|
||||||
|
+
|
||||||
|
+ SUBROUTINE A
|
||||||
|
+ USE SEQ
|
||||||
|
+ TYPE (STRUCT1) S
|
||||||
|
+ COMMON /BLOCK1/ S
|
||||||
|
+ IF (S%ID.NE.5) STOP 1
|
||||||
|
+ IF (S%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+ END SUBROUTINE
|
||||||
|
+
|
||||||
|
+ PROGRAM sequence_att_common
|
||||||
|
+ USE SEQ
|
||||||
|
+ IMPLICIT NONE
|
||||||
|
+ TYPE (STRUCT1) S1
|
||||||
|
+ TYPE (STRUCT1) S2
|
||||||
|
+ TYPE (STRUCT1) S3
|
||||||
|
+
|
||||||
|
+ EQUIVALENCE (S1,S2)
|
||||||
|
+ COMMON /BLOCK1/ S3
|
||||||
|
+
|
||||||
|
+ S1%ID = 5
|
||||||
|
+ S1%TYPE = 1000
|
||||||
|
+ S1%DEFVAL = -99
|
||||||
|
+ S1%NAME = "JANE"
|
||||||
|
+ S1%NIL = .FALSE.
|
||||||
|
+
|
||||||
|
+ IF (S2%ID.NE.5) STOP 1
|
||||||
|
+ IF (S2%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S2%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S2%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S2%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+
|
||||||
|
+ S3 = S1
|
||||||
|
+
|
||||||
|
+ CALL A
|
||||||
|
+
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_2.f b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..83512f0f3a2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_2.f
|
||||||
|
@@ -0,0 +1,57 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-fdec-sequence" }
|
||||||
|
+!
|
||||||
|
+! Test add default SEQUENCE attribute derived types appearing in
|
||||||
|
+! COMMON blocks and EQUIVALENCE statements.
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ MODULE SEQ
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID
|
||||||
|
+ INTEGER*4 TYPE
|
||||||
|
+ INTEGER*8 DEFVAL
|
||||||
|
+ CHARACTER*(4) NAME
|
||||||
|
+ LOGICAL*1 NIL
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+ END MODULE
|
||||||
|
+
|
||||||
|
+ SUBROUTINE A
|
||||||
|
+ USE SEQ
|
||||||
|
+ TYPE (STRUCT1) S
|
||||||
|
+ COMMON /BLOCK1/ S
|
||||||
|
+ IF (S%ID.NE.5) STOP 1
|
||||||
|
+ IF (S%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+ END SUBROUTINE
|
||||||
|
+
|
||||||
|
+ PROGRAM sequence_att_common
|
||||||
|
+ USE SEQ
|
||||||
|
+ IMPLICIT NONE
|
||||||
|
+ TYPE (STRUCT1) S1
|
||||||
|
+ TYPE (STRUCT1) S2
|
||||||
|
+ TYPE (STRUCT1) S3
|
||||||
|
+
|
||||||
|
+ EQUIVALENCE (S1,S2)
|
||||||
|
+ COMMON /BLOCK1/ S3
|
||||||
|
+
|
||||||
|
+ S1%ID = 5
|
||||||
|
+ S1%TYPE = 1000
|
||||||
|
+ S1%DEFVAL = -99
|
||||||
|
+ S1%NAME = "JANE"
|
||||||
|
+ S1%NIL = .FALSE.
|
||||||
|
+
|
||||||
|
+ IF (S2%ID.NE.5) STOP 1
|
||||||
|
+ IF (S2%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S2%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S2%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S2%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+
|
||||||
|
+ S3 = S1
|
||||||
|
+
|
||||||
|
+ CALL A
|
||||||
|
+
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_3.f b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..26cd59f9090
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default_3.f
|
||||||
|
@@ -0,0 +1,57 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-fdec -fno-dec-sequence" }
|
||||||
|
+!
|
||||||
|
+! Test add default SEQUENCE attribute derived types appearing in
|
||||||
|
+! COMMON blocks and EQUIVALENCE statements.
|
||||||
|
+!
|
||||||
|
+! Contributed by Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||||
|
+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ MODULE SEQ
|
||||||
|
+ TYPE STRUCT1
|
||||||
|
+ INTEGER*4 ID
|
||||||
|
+ INTEGER*4 TYPE
|
||||||
|
+ INTEGER*8 DEFVAL
|
||||||
|
+ CHARACTER*(4) NAME
|
||||||
|
+ LOGICAL*1 NIL
|
||||||
|
+ END TYPE STRUCT1
|
||||||
|
+ END MODULE
|
||||||
|
+
|
||||||
|
+ SUBROUTINE A
|
||||||
|
+ USE SEQ
|
||||||
|
+ TYPE (STRUCT1) S ! { dg-error "Derived type variable" }
|
||||||
|
+ COMMON /BLOCK1/ S
|
||||||
|
+ IF (S%ID.NE.5) STOP 1
|
||||||
|
+ IF (S%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+ END SUBROUTINE
|
||||||
|
+
|
||||||
|
+ PROGRAM sequence_att_common
|
||||||
|
+ USE SEQ
|
||||||
|
+ IMPLICIT NONE
|
||||||
|
+ TYPE (STRUCT1) S1
|
||||||
|
+ TYPE (STRUCT1) S2
|
||||||
|
+ TYPE (STRUCT1) S3 ! { dg-error "Derived type variable" }
|
||||||
|
+
|
||||||
|
+ EQUIVALENCE (S1,S2) ! { dg-error "Derived type variable" }
|
||||||
|
+ COMMON /BLOCK1/ S3
|
||||||
|
+
|
||||||
|
+ S1%ID = 5
|
||||||
|
+ S1%TYPE = 1000
|
||||||
|
+ S1%DEFVAL = -99
|
||||||
|
+ S1%NAME = "JANE"
|
||||||
|
+ S1%NIL = .FALSE.
|
||||||
|
+
|
||||||
|
+ IF (S2%ID.NE.5) STOP 1
|
||||||
|
+ IF (S2%TYPE.NE.1000) STOP 2
|
||||||
|
+ IF (S2%DEFVAL.NE.-99) STOP 3
|
||||||
|
+ IF (S2%NAME.NE."JANE") STOP 4
|
||||||
|
+ IF (S2%NIL.NEQV..FALSE.) STOP 5
|
||||||
|
+
|
||||||
|
+ S3 = S1
|
||||||
|
+
|
||||||
|
+ CALL A
|
||||||
|
+
|
||||||
|
+ END
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
305
SOURCES/gcc11-fortran-flogical-as-integer.patch
Normal file
305
SOURCES/gcc11-fortran-flogical-as-integer.patch
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
From 9b45f3063dfd2b893e7963a4828c1b0afecdc68a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Eggleston <markeggleston@gcc.gnu.org>
|
||||||
|
Date: Fri, 22 Jan 2021 12:41:46 +0000
|
||||||
|
Subject: [PATCH 02/10] Convert LOGICAL to INTEGER for arithmetic ops, and vice
|
||||||
|
versa
|
||||||
|
|
||||||
|
We allow converting LOGICAL types to INTEGER when doing arithmetic
|
||||||
|
operations, and converting INTEGER types to LOGICAL for use in
|
||||||
|
boolean operations.
|
||||||
|
|
||||||
|
This feature is enabled with the -flogical-as-integer flag.
|
||||||
|
|
||||||
|
Note: using this feature will disable bitwise logical operations enabled by
|
||||||
|
-fdec.
|
||||||
|
---
|
||||||
|
gcc/fortran/lang.opt | 4 ++
|
||||||
|
gcc/fortran/resolve.c | 55 ++++++++++++++++++-
|
||||||
|
.../logical_to_integer_and_vice_versa_1.f | 31 +++++++++++
|
||||||
|
.../logical_to_integer_and_vice_versa_2.f | 31 +++++++++++
|
||||||
|
.../logical_to_integer_and_vice_versa_3.f | 33 +++++++++++
|
||||||
|
.../logical_to_integer_and_vice_versa_4.f | 33 +++++++++++
|
||||||
|
6 files changed, 186 insertions(+), 1 deletion(-)
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
|
||||||
|
create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
|
||||||
|
|
||||||
|
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||||
|
index 52bd522051e..c4da248f07c 100644
|
||||||
|
--- a/gcc/fortran/lang.opt
|
||||||
|
+++ b/gcc/fortran/lang.opt
|
||||||
|
@@ -497,6 +497,10 @@ fdec-static
|
||||||
|
Fortran Var(flag_dec_static)
|
||||||
|
Enable DEC-style STATIC and AUTOMATIC attributes.
|
||||||
|
|
||||||
|
+flogical-as-integer
|
||||||
|
+Fortran Var(flag_logical_as_integer)
|
||||||
|
+Convert from integer to logical or logical to integer for arithmetic operations.
|
||||||
|
+
|
||||||
|
fdefault-double-8
|
||||||
|
Fortran Var(flag_default_double)
|
||||||
|
Set the default double precision kind to an 8 byte wide type.
|
||||||
|
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||||
|
index c075d0fa0c4..4b90cb59902 100644
|
||||||
|
--- a/gcc/fortran/resolve.c
|
||||||
|
+++ b/gcc/fortran/resolve.c
|
||||||
|
@@ -3915,7 +3915,6 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
|
||||||
|
return gfc_closest_fuzzy_match (op, candidates);
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
/* Callback finding an impure function as an operand to an .and. or
|
||||||
|
.or. expression. Remember the last function warned about to
|
||||||
|
avoid double warnings when recursing. */
|
||||||
|
@@ -3975,6 +3974,22 @@ convert_hollerith_to_character (gfc_expr *e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* If E is a logical, convert it to an integer and issue a warning
|
||||||
|
+ for the conversion. */
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+convert_integer_to_logical (gfc_expr *e)
|
||||||
|
+{
|
||||||
|
+ if (e->ts.type == BT_INTEGER)
|
||||||
|
+ {
|
||||||
|
+ /* Convert to LOGICAL */
|
||||||
|
+ gfc_typespec t;
|
||||||
|
+ t.type = BT_LOGICAL;
|
||||||
|
+ t.kind = 1;
|
||||||
|
+ gfc_convert_type_warn (e, &t, 2, 1);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Convert to numeric and issue a warning for the conversion. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -3987,6 +4002,22 @@ convert_to_numeric (gfc_expr *a, gfc_expr *b)
|
||||||
|
gfc_convert_type_warn (a, &t, 2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* If E is a logical, convert it to an integer and issue a warning
|
||||||
|
+ for the conversion. */
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+convert_logical_to_integer (gfc_expr *e)
|
||||||
|
+{
|
||||||
|
+ if (e->ts.type == BT_LOGICAL)
|
||||||
|
+ {
|
||||||
|
+ /* Convert to INTEGER */
|
||||||
|
+ gfc_typespec t;
|
||||||
|
+ t.type = BT_INTEGER;
|
||||||
|
+ t.kind = 1;
|
||||||
|
+ gfc_convert_type_warn (e, &t, 2, 1);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Resolve an operator expression node. This can involve replacing the
|
||||||
|
operation with a user defined function call. */
|
||||||
|
|
||||||
|
@@ -4072,6 +4103,12 @@ resolve_operator (gfc_expr *e)
|
||||||
|
case INTRINSIC_TIMES:
|
||||||
|
case INTRINSIC_DIVIDE:
|
||||||
|
case INTRINSIC_POWER:
|
||||||
|
+ if (flag_logical_as_integer)
|
||||||
|
+ {
|
||||||
|
+ convert_logical_to_integer (op1);
|
||||||
|
+ convert_logical_to_integer (op2);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
|
||||||
|
{
|
||||||
|
gfc_type_convert_binary (e, 1);
|
||||||
|
@@ -4108,6 +4145,13 @@ resolve_operator (gfc_expr *e)
|
||||||
|
case INTRINSIC_OR:
|
||||||
|
case INTRINSIC_EQV:
|
||||||
|
case INTRINSIC_NEQV:
|
||||||
|
+
|
||||||
|
+ if (flag_logical_as_integer)
|
||||||
|
+ {
|
||||||
|
+ convert_integer_to_logical (op1);
|
||||||
|
+ convert_integer_to_logical (op2);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
|
||||||
|
{
|
||||||
|
e->ts.type = BT_LOGICAL;
|
||||||
|
@@ -4158,6 +4202,9 @@ resolve_operator (gfc_expr *e)
|
||||||
|
goto simplify_op;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (flag_logical_as_integer)
|
||||||
|
+ convert_integer_to_logical (op1);
|
||||||
|
+
|
||||||
|
if (op1->ts.type == BT_LOGICAL)
|
||||||
|
{
|
||||||
|
e->ts.type = BT_LOGICAL;
|
||||||
|
@@ -4198,6 +4245,12 @@ resolve_operator (gfc_expr *e)
|
||||||
|
convert_hollerith_to_character (op2);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (flag_logical_as_integer)
|
||||||
|
+ {
|
||||||
|
+ convert_logical_to_integer (op1);
|
||||||
|
+ convert_logical_to_integer (op2);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
|
||||||
|
&& op1->ts.kind == op2->ts.kind)
|
||||||
|
{
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..938a91d9e9a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+! { dg-do run }
|
||||||
|
+! { dg-options "-std=legacy -flogical-as-integer" }
|
||||||
|
+!
|
||||||
|
+! Test conversion between logical and integer for logical operators
|
||||||
|
+!
|
||||||
|
+! Test case contributed by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||||
|
+! Modified for -flogical-as-integer by Mark Eggleston
|
||||||
|
+! <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+ PROGRAM logical_integer_conversion
|
||||||
|
+ LOGICAL lpos /.true./
|
||||||
|
+ INTEGER ineg/0/
|
||||||
|
+ INTEGER ires
|
||||||
|
+ LOGICAL lres
|
||||||
|
+
|
||||||
|
+ ! Test Logicals converted to Integers
|
||||||
|
+ if ((lpos.AND.ineg).EQ.1) STOP 3
|
||||||
|
+ if ((ineg.AND.lpos).NE.0) STOP 4
|
||||||
|
+ ires = (.true..AND.0)
|
||||||
|
+ if (ires.NE.0) STOP 5
|
||||||
|
+ ires = (1.AND..false.)
|
||||||
|
+ if (ires.EQ.1) STOP 6
|
||||||
|
+
|
||||||
|
+ ! Test Integers converted to Logicals
|
||||||
|
+ if (lpos.EQ.ineg) STOP 7
|
||||||
|
+ if (ineg.EQ.lpos) STOP 8
|
||||||
|
+ lres = (.true..EQ.0)
|
||||||
|
+ if (lres) STOP 9
|
||||||
|
+ lres = (1.EQ..false.)
|
||||||
|
+ if (lres) STOP 10
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..9f146202ba5
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
|
||||||
|
+!
|
||||||
|
+! Based on logical_to_integer_and_vice_versa_1.f but with option disabled
|
||||||
|
+! to test for error messages.
|
||||||
|
+!
|
||||||
|
+! Test case contributed by by Mark Eggleston <mark.eggleston@codethink.com>
|
||||||
|
+!
|
||||||
|
+!
|
||||||
|
+ PROGRAM logical_integer_conversion
|
||||||
|
+ LOGICAL lpos /.true./
|
||||||
|
+ INTEGER ineg/0/
|
||||||
|
+ INTEGER ires
|
||||||
|
+ LOGICAL lres
|
||||||
|
+
|
||||||
|
+ ! Test Logicals converted to Integers
|
||||||
|
+ if ((lpos.AND.ineg).EQ.1) STOP 3 ! { dg-error "Operands of logical operator" }
|
||||||
|
+ if ((ineg.AND.lpos).NE.0) STOP 4 ! { dg-error "Operands of logical operator" }
|
||||||
|
+ ires = (.true..AND.0) ! { dg-error "Operands of logical operator" }
|
||||||
|
+ if (ires.NE.0) STOP 5
|
||||||
|
+ ires = (1.AND..false.) ! { dg-error "Operands of logical operator" }
|
||||||
|
+ if (ires.EQ.1) STOP 6
|
||||||
|
+
|
||||||
|
+ ! Test Integers converted to Logicals
|
||||||
|
+ if (lpos.EQ.ineg) STOP 7 ! { dg-error "Operands of comparison operator" }
|
||||||
|
+ if (ineg.EQ.lpos) STOP 8 ! { dg-error "Operands of comparison operator" }
|
||||||
|
+ lres = (.true..EQ.0) ! { dg-error "Operands of comparison operator" }
|
||||||
|
+ if (lres) STOP 9
|
||||||
|
+ lres = (1.EQ..false.) ! { dg-error "Operands of comparison operator" }
|
||||||
|
+ if (lres) STOP 10
|
||||||
|
+ END
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..446873eb2dc
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-std=legacy -flogical-as-integer" }
|
||||||
|
+!
|
||||||
|
+! Test conversion between logical and integer for logical operators
|
||||||
|
+!
|
||||||
|
+ program test
|
||||||
|
+ logical f /.false./
|
||||||
|
+ logical t /.true./
|
||||||
|
+ real x
|
||||||
|
+
|
||||||
|
+ x = 7.7
|
||||||
|
+ x = x + t*3.0
|
||||||
|
+ if (abs(x - 10.7).gt.0.00001) stop 1
|
||||||
|
+ x = x + .false.*5.0
|
||||||
|
+ if (abs(x - 10.7).gt.0.00001) stop 2
|
||||||
|
+ x = x - .true.*5.0
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 3
|
||||||
|
+ x = x + t
|
||||||
|
+ if (abs(x - 6.7).gt.0.00001) stop 4
|
||||||
|
+ x = x + f
|
||||||
|
+ if (abs(x - 6.7).gt.0.00001) stop 5
|
||||||
|
+ x = x - t
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 6
|
||||||
|
+ x = x - f
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 7
|
||||||
|
+ x = x**.true.
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 8
|
||||||
|
+ x = x**.false.
|
||||||
|
+ if (abs(x - 1.0).gt.0.00001) stop 9
|
||||||
|
+ x = x/t
|
||||||
|
+ if (abs(x - 1.0).gt.0.00001) stop 10
|
||||||
|
+ if ((x/.false.).le.huge(x)) stop 11
|
||||||
|
+ end
|
||||||
|
diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..4301a4988d8
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+! { dg-do compile }
|
||||||
|
+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
|
||||||
|
+!
|
||||||
|
+! Test conversion between logical and integer for logical operators
|
||||||
|
+!
|
||||||
|
+ program test
|
||||||
|
+ logical f /.false./
|
||||||
|
+ logical t /.true./
|
||||||
|
+ real x
|
||||||
|
+
|
||||||
|
+ x = 7.7
|
||||||
|
+ x = x + t*3.0 ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 10.7).gt.0.00001) stop 1
|
||||||
|
+ x = x + .false.*5.0 ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 10.7).gt.0.00001) stop 2
|
||||||
|
+ x = x - .true.*5.0 ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 3
|
||||||
|
+ x = x + t ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 6.7).gt.0.00001) stop 4
|
||||||
|
+ x = x + f ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 6.7).gt.0.00001) stop 5
|
||||||
|
+ x = x - t ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 6
|
||||||
|
+ x = x - f ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 7
|
||||||
|
+ x = x**.true. ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 5.7).gt.0.00001) stop 8
|
||||||
|
+ x = x**.false. ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 1.0).gt.0.00001) stop 9
|
||||||
|
+ x = x/t ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ if (abs(x - 1.0).gt.0.00001) stop 10
|
||||||
|
+ if ((x/.false.).le.huge(x)) stop 11 ! { dg-error "Operands of binary numeric" }
|
||||||
|
+ end
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
126
SOURCES/gcc11-hack.patch
Normal file
126
SOURCES/gcc11-hack.patch
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100
|
||||||
|
+++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100
|
||||||
|
@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $(
|
||||||
|
libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
|
||||||
|
ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
|
||||||
|
|
||||||
|
+DEFAULTMULTIFLAGS :=
|
||||||
|
+ifeq ($(MULTISUBDIR),)
|
||||||
|
+targ:=$(subst -, ,$(target))
|
||||||
|
+arch:=$(word 1,$(targ))
|
||||||
|
+ifeq ($(words $(targ)),2)
|
||||||
|
+osys:=$(word 2,$(targ))
|
||||||
|
+else
|
||||||
|
+osys:=$(word 3,$(targ))
|
||||||
|
+endif
|
||||||
|
+ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),)
|
||||||
|
+ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64)
|
||||||
|
+DEFAULTMULTIFLAGS := -m64
|
||||||
|
+else
|
||||||
|
+ifeq ($(strip $(filter-out s390%, $(arch))),)
|
||||||
|
+DEFAULTMULTIFLAGS := -m31
|
||||||
|
+else
|
||||||
|
+DEFAULTMULTIFLAGS := -m32
|
||||||
|
+endif
|
||||||
|
+endif
|
||||||
|
+endif
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
# exeext should not be used because it's the *host* exeext. We're building
|
||||||
|
# a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
|
||||||
|
# definitions just in case something slips through the safety net provided
|
||||||
|
# by recursive make invocations in gcc/ada/Makefile.in
|
||||||
|
LIBADA_FLAGS_TO_PASS = \
|
||||||
|
"MAKEOVERRIDES=" \
|
||||||
|
- "LDFLAGS=$(LDFLAGS)" \
|
||||||
|
+ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||||
|
"LN_S=$(LN_S)" \
|
||||||
|
"SHELL=$(SHELL)" \
|
||||||
|
- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
|
||||||
|
- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
|
||||||
|
- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
|
||||||
|
+ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||||
|
+ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||||
|
+ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
|
||||||
|
"PICFLAG_FOR_TARGET=$(PICFLAG)" \
|
||||||
|
"THREAD_KIND=$(THREAD_KIND)" \
|
||||||
|
"TRACE=$(TRACE)" \
|
||||||
|
@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \
|
||||||
|
"exeext=.exeext.should.not.be.used " \
|
||||||
|
'CC=the.host.compiler.should.not.be.needed' \
|
||||||
|
"GCC_FOR_TARGET=$(CC)" \
|
||||||
|
- "CFLAGS=$(CFLAGS)"
|
||||||
|
+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
|
||||||
|
|
||||||
|
.PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool
|
||||||
|
|
||||||
|
--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100
|
||||||
|
+++ config-ml.in 2019-01-11 18:16:23.442726914 +0100
|
||||||
|
@@ -511,6 +511,8 @@ multi-do:
|
||||||
|
ADAFLAGS="$(ADAFLAGS) $${flags}" \
|
||||||
|
prefix="$(prefix)" \
|
||||||
|
exec_prefix="$(exec_prefix)" \
|
||||||
|
+ mandir="$(mandir)" \
|
||||||
|
+ infodir="$(infodir)" \
|
||||||
|
GOCFLAGS="$(GOCFLAGS) $${flags}" \
|
||||||
|
GDCFLAGS="$(GDCFLAGS) $${flags}" \
|
||||||
|
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
||||||
|
--- libcpp/macro.c.jj 2019-01-09 13:01:21.420552123 +0100
|
||||||
|
+++ libcpp/macro.c 2019-01-11 18:18:17.736876285 +0100
|
||||||
|
@@ -3256,8 +3256,6 @@ static cpp_macro *
|
||||||
|
create_iso_definition (cpp_reader *pfile)
|
||||||
|
{
|
||||||
|
bool following_paste_op = false;
|
||||||
|
- const char *paste_op_error_msg =
|
||||||
|
- N_("'##' cannot appear at either end of a macro expansion");
|
||||||
|
unsigned int num_extra_tokens = 0;
|
||||||
|
unsigned nparms = 0;
|
||||||
|
cpp_hashnode **params = NULL;
|
||||||
|
@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
|
||||||
|
function-like macros, but not at the end. */
|
||||||
|
if (following_paste_op)
|
||||||
|
{
|
||||||
|
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||||
|
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||||
|
+ "'##' cannot appear at either end of a macro "
|
||||||
|
+ "expansion");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (!vaopt_tracker.completed ())
|
||||||
|
@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
|
||||||
|
function-like macros, but not at the beginning. */
|
||||||
|
if (macro->count == 1)
|
||||||
|
{
|
||||||
|
- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
|
||||||
|
+ cpp_error (pfile, CPP_DL_ERROR,
|
||||||
|
+ "'##' cannot appear at either end of a macro "
|
||||||
|
+ "expansion");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
--- libcpp/expr.c.jj 2019-01-09 13:01:22.415535734 +0100
|
||||||
|
+++ libcpp/expr.c 2019-01-11 18:16:23.444726882 +0100
|
||||||
|
@@ -803,16 +803,17 @@ cpp_classify_number (cpp_reader *pfile,
|
||||||
|
if ((result & CPP_N_WIDTH) == CPP_N_LARGE
|
||||||
|
&& CPP_OPTION (pfile, cpp_warn_long_long))
|
||||||
|
{
|
||||||
|
- const char *message = CPP_OPTION (pfile, cplusplus)
|
||||||
|
- ? N_("use of C++11 long long integer constant")
|
||||||
|
- : N_("use of C99 long long integer constant");
|
||||||
|
-
|
||||||
|
if (CPP_OPTION (pfile, c99))
|
||||||
|
cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
|
||||||
|
- 0, message);
|
||||||
|
+ 0, CPP_OPTION (pfile, cplusplus)
|
||||||
|
+ ? N_("use of C++11 long long integer constant")
|
||||||
|
+ : N_("use of C99 long long integer constant"));
|
||||||
|
else
|
||||||
|
cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
|
||||||
|
- virtual_location, 0, message);
|
||||||
|
+ virtual_location, 0,
|
||||||
|
+ CPP_OPTION (pfile, cplusplus)
|
||||||
|
+ ? N_("use of C++11 long long integer constant")
|
||||||
|
+ : N_("use of C99 long long integer constant"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
|
716
SOURCES/gcc11-isl-dl.patch
Normal file
716
SOURCES/gcc11-isl-dl.patch
Normal file
@ -0,0 +1,716 @@
|
|||||||
|
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||||
|
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
||||||
|
@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
|
||||||
|
# and the system's installed libraries.
|
||||||
|
LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
|
||||||
|
$(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
|
||||||
|
-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||||
|
+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
|
||||||
|
$(ZLIB) $(ZSTD_LIB)
|
||||||
|
# Any system libraries needed just for GNAT.
|
||||||
|
SYSLIBS = @GNAT_LIBEXC@
|
||||||
|
@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file)
|
||||||
|
$(common_out_object_file): $(common_out_file)
|
||||||
|
$(COMPILE) $<
|
||||||
|
$(POSTCOMPILE)
|
||||||
|
+
|
||||||
|
+graphite%.o : \
|
||||||
|
+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
|
||||||
|
+graphite.o : \
|
||||||
|
+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
|
||||||
|
+graphite%.o : \
|
||||||
|
+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
|
||||||
|
+graphite.o : \
|
||||||
|
+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
|
||||||
|
#
|
||||||
|
# Generate header and source files from the machine description,
|
||||||
|
# and compile them.
|
||||||
|
--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
|
||||||
|
+++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
|
||||||
|
@@ -24,6 +24,591 @@ along with GCC; see the file COPYING3.
|
||||||
|
|
||||||
|
#include "sese.h"
|
||||||
|
|
||||||
|
+#include <isl/version.h>
|
||||||
|
+#include <dlfcn.h>
|
||||||
|
+
|
||||||
|
+#define DYNSYMS \
|
||||||
|
+ DYNSYM (isl_aff_add_coefficient_si); \
|
||||||
|
+ DYNSYM (isl_aff_free); \
|
||||||
|
+ DYNSYM (isl_aff_get_space); \
|
||||||
|
+ DYNSYM (isl_aff_set_coefficient_si); \
|
||||||
|
+ DYNSYM (isl_aff_set_constant_si); \
|
||||||
|
+ DYNSYM (isl_aff_zero_on_domain); \
|
||||||
|
+ DYNSYM (isl_band_free); \
|
||||||
|
+ DYNSYM (isl_band_get_children); \
|
||||||
|
+ DYNSYM (isl_band_get_partial_schedule); \
|
||||||
|
+ DYNSYM (isl_band_has_children); \
|
||||||
|
+ DYNSYM (isl_band_list_free); \
|
||||||
|
+ DYNSYM (isl_band_list_get_band); \
|
||||||
|
+ DYNSYM (isl_band_list_get_ctx); \
|
||||||
|
+ DYNSYM (isl_band_list_n_band); \
|
||||||
|
+ DYNSYM (isl_band_n_member); \
|
||||||
|
+ DYNSYM (isl_basic_map_add_constraint); \
|
||||||
|
+ DYNSYM (isl_basic_map_project_out); \
|
||||||
|
+ DYNSYM (isl_basic_map_universe); \
|
||||||
|
+ DYNSYM (isl_constraint_set_coefficient_si); \
|
||||||
|
+ DYNSYM (isl_constraint_set_constant_si); \
|
||||||
|
+ DYNSYM (isl_ctx_alloc); \
|
||||||
|
+ DYNSYM (isl_ctx_free); \
|
||||||
|
+ DYNSYM (isl_equality_alloc); \
|
||||||
|
+ DYNSYM (isl_id_alloc); \
|
||||||
|
+ DYNSYM (isl_id_copy); \
|
||||||
|
+ DYNSYM (isl_id_free); \
|
||||||
|
+ DYNSYM (isl_inequality_alloc); \
|
||||||
|
+ DYNSYM (isl_local_space_copy); \
|
||||||
|
+ DYNSYM (isl_local_space_free); \
|
||||||
|
+ DYNSYM (isl_local_space_from_space); \
|
||||||
|
+ DYNSYM (isl_local_space_range); \
|
||||||
|
+ DYNSYM (isl_map_add_constraint); \
|
||||||
|
+ DYNSYM (isl_map_add_dims); \
|
||||||
|
+ DYNSYM (isl_map_align_params); \
|
||||||
|
+ DYNSYM (isl_map_apply_range); \
|
||||||
|
+ DYNSYM (isl_map_copy); \
|
||||||
|
+ DYNSYM (isl_map_dim); \
|
||||||
|
+ DYNSYM (isl_map_dump); \
|
||||||
|
+ DYNSYM (isl_map_equate); \
|
||||||
|
+ DYNSYM (isl_map_fix_si); \
|
||||||
|
+ DYNSYM (isl_map_flat_product); \
|
||||||
|
+ DYNSYM (isl_map_flat_range_product); \
|
||||||
|
+ DYNSYM (isl_map_free); \
|
||||||
|
+ DYNSYM (isl_map_from_basic_map); \
|
||||||
|
+ DYNSYM (isl_map_from_pw_aff); \
|
||||||
|
+ DYNSYM (isl_map_from_union_map); \
|
||||||
|
+ DYNSYM (isl_map_get_ctx); \
|
||||||
|
+ DYNSYM (isl_map_get_space); \
|
||||||
|
+ DYNSYM (isl_map_get_tuple_id); \
|
||||||
|
+ DYNSYM (isl_map_insert_dims); \
|
||||||
|
+ DYNSYM (isl_map_intersect); \
|
||||||
|
+ DYNSYM (isl_map_intersect_domain); \
|
||||||
|
+ DYNSYM (isl_map_intersect_range); \
|
||||||
|
+ DYNSYM (isl_map_is_empty); \
|
||||||
|
+ DYNSYM (isl_map_lex_ge); \
|
||||||
|
+ DYNSYM (isl_map_lex_le); \
|
||||||
|
+ DYNSYM (isl_map_n_out); \
|
||||||
|
+ DYNSYM (isl_map_range); \
|
||||||
|
+ DYNSYM (isl_map_set_tuple_id); \
|
||||||
|
+ DYNSYM (isl_map_universe); \
|
||||||
|
+ DYNSYM (isl_options_set_on_error); \
|
||||||
|
+ DYNSYM (isl_options_set_schedule_serialize_sccs); \
|
||||||
|
+ DYNSYM (isl_printer_set_yaml_style); \
|
||||||
|
+ DYNSYM (isl_options_set_schedule_max_constant_term); \
|
||||||
|
+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
|
||||||
|
+ DYNSYM (isl_printer_free); \
|
||||||
|
+ DYNSYM (isl_printer_print_aff); \
|
||||||
|
+ DYNSYM (isl_printer_print_constraint); \
|
||||||
|
+ DYNSYM (isl_printer_print_map); \
|
||||||
|
+ DYNSYM (isl_printer_print_set); \
|
||||||
|
+ DYNSYM (isl_printer_to_file); \
|
||||||
|
+ DYNSYM (isl_pw_aff_add); \
|
||||||
|
+ DYNSYM (isl_pw_aff_alloc); \
|
||||||
|
+ DYNSYM (isl_pw_aff_copy); \
|
||||||
|
+ DYNSYM (isl_pw_aff_eq_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_free); \
|
||||||
|
+ DYNSYM (isl_pw_aff_from_aff); \
|
||||||
|
+ DYNSYM (isl_pw_aff_ge_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_gt_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_is_cst); \
|
||||||
|
+ DYNSYM (isl_pw_aff_le_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_lt_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_mul); \
|
||||||
|
+ DYNSYM (isl_pw_aff_ne_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_nonneg_set); \
|
||||||
|
+ DYNSYM (isl_pw_aff_set_tuple_id); \
|
||||||
|
+ DYNSYM (isl_pw_aff_sub); \
|
||||||
|
+ DYNSYM (isl_pw_aff_zero_set); \
|
||||||
|
+ DYNSYM (isl_schedule_free); \
|
||||||
|
+ DYNSYM (isl_schedule_get_band_forest); \
|
||||||
|
+ DYNSYM (isl_set_add_constraint); \
|
||||||
|
+ DYNSYM (isl_set_add_dims); \
|
||||||
|
+ DYNSYM (isl_set_apply); \
|
||||||
|
+ DYNSYM (isl_set_coalesce); \
|
||||||
|
+ DYNSYM (isl_set_copy); \
|
||||||
|
+ DYNSYM (isl_set_dim); \
|
||||||
|
+ DYNSYM (isl_set_fix_si); \
|
||||||
|
+ DYNSYM (isl_set_free); \
|
||||||
|
+ DYNSYM (isl_set_get_space); \
|
||||||
|
+ DYNSYM (isl_set_get_tuple_id); \
|
||||||
|
+ DYNSYM (isl_set_intersect); \
|
||||||
|
+ DYNSYM (isl_set_is_empty); \
|
||||||
|
+ DYNSYM (isl_set_n_dim); \
|
||||||
|
+ DYNSYM (isl_set_nat_universe); \
|
||||||
|
+ DYNSYM (isl_set_project_out); \
|
||||||
|
+ DYNSYM (isl_set_set_tuple_id); \
|
||||||
|
+ DYNSYM (isl_set_universe); \
|
||||||
|
+ DYNSYM (isl_space_add_dims); \
|
||||||
|
+ DYNSYM (isl_space_alloc); \
|
||||||
|
+ DYNSYM (isl_space_copy); \
|
||||||
|
+ DYNSYM (isl_space_dim); \
|
||||||
|
+ DYNSYM (isl_space_domain); \
|
||||||
|
+ DYNSYM (isl_space_find_dim_by_id); \
|
||||||
|
+ DYNSYM (isl_space_free); \
|
||||||
|
+ DYNSYM (isl_space_from_domain); \
|
||||||
|
+ DYNSYM (isl_space_get_tuple_id); \
|
||||||
|
+ DYNSYM (isl_space_params_alloc); \
|
||||||
|
+ DYNSYM (isl_space_range); \
|
||||||
|
+ DYNSYM (isl_space_set_alloc); \
|
||||||
|
+ DYNSYM (isl_space_set_dim_id); \
|
||||||
|
+ DYNSYM (isl_space_set_tuple_id); \
|
||||||
|
+ DYNSYM (isl_union_map_add_map); \
|
||||||
|
+ DYNSYM (isl_union_map_align_params); \
|
||||||
|
+ DYNSYM (isl_union_map_apply_domain); \
|
||||||
|
+ DYNSYM (isl_union_map_apply_range); \
|
||||||
|
+ DYNSYM (isl_union_map_compute_flow); \
|
||||||
|
+ DYNSYM (isl_union_map_copy); \
|
||||||
|
+ DYNSYM (isl_union_map_empty); \
|
||||||
|
+ DYNSYM (isl_union_map_flat_range_product); \
|
||||||
|
+ DYNSYM (isl_union_map_foreach_map); \
|
||||||
|
+ DYNSYM (isl_union_map_free); \
|
||||||
|
+ DYNSYM (isl_union_map_from_map); \
|
||||||
|
+ DYNSYM (isl_union_map_get_ctx); \
|
||||||
|
+ DYNSYM (isl_union_map_get_space); \
|
||||||
|
+ DYNSYM (isl_union_map_gist_domain); \
|
||||||
|
+ DYNSYM (isl_union_map_gist_range); \
|
||||||
|
+ DYNSYM (isl_union_map_intersect_domain); \
|
||||||
|
+ DYNSYM (isl_union_map_is_empty); \
|
||||||
|
+ DYNSYM (isl_union_map_subtract); \
|
||||||
|
+ DYNSYM (isl_union_map_union); \
|
||||||
|
+ DYNSYM (isl_union_set_add_set); \
|
||||||
|
+ DYNSYM (isl_union_set_compute_schedule); \
|
||||||
|
+ DYNSYM (isl_union_set_copy); \
|
||||||
|
+ DYNSYM (isl_union_set_empty); \
|
||||||
|
+ DYNSYM (isl_union_set_from_set); \
|
||||||
|
+ DYNSYM (isl_aff_add_constant_val); \
|
||||||
|
+ DYNSYM (isl_aff_get_coefficient_val); \
|
||||||
|
+ DYNSYM (isl_aff_get_ctx); \
|
||||||
|
+ DYNSYM (isl_aff_mod_val); \
|
||||||
|
+ DYNSYM (isl_ast_build_ast_from_schedule); \
|
||||||
|
+ DYNSYM (isl_ast_build_free); \
|
||||||
|
+ DYNSYM (isl_ast_build_from_context); \
|
||||||
|
+ DYNSYM (isl_ast_build_get_ctx); \
|
||||||
|
+ DYNSYM (isl_ast_build_get_schedule); \
|
||||||
|
+ DYNSYM (isl_ast_build_get_schedule_space); \
|
||||||
|
+ DYNSYM (isl_ast_build_set_before_each_for); \
|
||||||
|
+ DYNSYM (isl_ast_build_set_options); \
|
||||||
|
+ DYNSYM (isl_ast_expr_free); \
|
||||||
|
+ DYNSYM (isl_ast_expr_from_val); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_ctx); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_id); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_op_arg); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_op_n_arg); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_op_type); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_type); \
|
||||||
|
+ DYNSYM (isl_ast_expr_get_val); \
|
||||||
|
+ DYNSYM (isl_ast_expr_sub); \
|
||||||
|
+ DYNSYM (isl_ast_node_block_get_children); \
|
||||||
|
+ DYNSYM (isl_ast_node_for_get_body); \
|
||||||
|
+ DYNSYM (isl_ast_node_for_get_cond); \
|
||||||
|
+ DYNSYM (isl_ast_node_for_get_inc); \
|
||||||
|
+ DYNSYM (isl_ast_node_for_get_init); \
|
||||||
|
+ DYNSYM (isl_ast_node_for_get_iterator); \
|
||||||
|
+ DYNSYM (isl_ast_node_free); \
|
||||||
|
+ DYNSYM (isl_ast_node_get_annotation); \
|
||||||
|
+ DYNSYM (isl_ast_node_get_type); \
|
||||||
|
+ DYNSYM (isl_ast_node_if_get_cond); \
|
||||||
|
+ DYNSYM (isl_ast_node_if_get_else); \
|
||||||
|
+ DYNSYM (isl_ast_node_if_get_then); \
|
||||||
|
+ DYNSYM (isl_ast_node_list_free); \
|
||||||
|
+ DYNSYM (isl_ast_node_list_get_ast_node); \
|
||||||
|
+ DYNSYM (isl_ast_node_list_n_ast_node); \
|
||||||
|
+ DYNSYM (isl_ast_node_user_get_expr); \
|
||||||
|
+ DYNSYM (isl_constraint_set_coefficient_val); \
|
||||||
|
+ DYNSYM (isl_constraint_set_constant_val); \
|
||||||
|
+ DYNSYM (isl_id_get_user); \
|
||||||
|
+ DYNSYM (isl_local_space_get_ctx); \
|
||||||
|
+ DYNSYM (isl_map_fix_val); \
|
||||||
|
+ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \
|
||||||
|
+ DYNSYM (isl_printer_print_ast_node); \
|
||||||
|
+ DYNSYM (isl_printer_print_str); \
|
||||||
|
+ DYNSYM (isl_printer_set_output_format); \
|
||||||
|
+ DYNSYM (isl_pw_aff_mod_val); \
|
||||||
|
+ DYNSYM (isl_schedule_constraints_compute_schedule); \
|
||||||
|
+ DYNSYM (isl_schedule_constraints_on_domain); \
|
||||||
|
+ DYNSYM (isl_schedule_constraints_set_coincidence); \
|
||||||
|
+ DYNSYM (isl_schedule_constraints_set_proximity); \
|
||||||
|
+ DYNSYM (isl_schedule_constraints_set_validity); \
|
||||||
|
+ DYNSYM (isl_set_get_dim_id); \
|
||||||
|
+ DYNSYM (isl_set_max_val); \
|
||||||
|
+ DYNSYM (isl_set_min_val); \
|
||||||
|
+ DYNSYM (isl_set_params); \
|
||||||
|
+ DYNSYM (isl_space_align_params); \
|
||||||
|
+ DYNSYM (isl_space_map_from_domain_and_range); \
|
||||||
|
+ DYNSYM (isl_space_set_tuple_name); \
|
||||||
|
+ DYNSYM (isl_space_wrap); \
|
||||||
|
+ DYNSYM (isl_union_map_from_domain_and_range); \
|
||||||
|
+ DYNSYM (isl_union_map_range); \
|
||||||
|
+ DYNSYM (isl_union_set_union); \
|
||||||
|
+ DYNSYM (isl_union_set_universe); \
|
||||||
|
+ DYNSYM (isl_val_2exp); \
|
||||||
|
+ DYNSYM (isl_val_add_ui); \
|
||||||
|
+ DYNSYM (isl_val_copy); \
|
||||||
|
+ DYNSYM (isl_val_free); \
|
||||||
|
+ DYNSYM (isl_val_int_from_si); \
|
||||||
|
+ DYNSYM (isl_val_int_from_ui); \
|
||||||
|
+ DYNSYM (isl_val_mul); \
|
||||||
|
+ DYNSYM (isl_val_neg); \
|
||||||
|
+ DYNSYM (isl_val_sub); \
|
||||||
|
+ DYNSYM (isl_printer_print_union_map); \
|
||||||
|
+ DYNSYM (isl_pw_aff_get_ctx); \
|
||||||
|
+ DYNSYM (isl_val_is_int); \
|
||||||
|
+ DYNSYM (isl_ctx_get_max_operations); \
|
||||||
|
+ DYNSYM (isl_ctx_set_max_operations); \
|
||||||
|
+ DYNSYM (isl_ctx_last_error); \
|
||||||
|
+ DYNSYM (isl_ctx_reset_operations); \
|
||||||
|
+ DYNSYM (isl_map_coalesce); \
|
||||||
|
+ DYNSYM (isl_printer_print_schedule); \
|
||||||
|
+ DYNSYM (isl_set_set_dim_id); \
|
||||||
|
+ DYNSYM (isl_union_map_coalesce); \
|
||||||
|
+ DYNSYM (isl_multi_val_set_val); \
|
||||||
|
+ DYNSYM (isl_multi_val_zero); \
|
||||||
|
+ DYNSYM (isl_options_set_schedule_max_coefficient); \
|
||||||
|
+ DYNSYM (isl_options_set_tile_scale_tile_loops); \
|
||||||
|
+ DYNSYM (isl_schedule_copy); \
|
||||||
|
+ DYNSYM (isl_schedule_get_map); \
|
||||||
|
+ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \
|
||||||
|
+ DYNSYM (isl_schedule_node_band_get_permutable); \
|
||||||
|
+ DYNSYM (isl_schedule_node_band_get_space); \
|
||||||
|
+ DYNSYM (isl_schedule_node_band_tile); \
|
||||||
|
+ DYNSYM (isl_schedule_node_child); \
|
||||||
|
+ DYNSYM (isl_schedule_node_free); \
|
||||||
|
+ DYNSYM (isl_schedule_node_get_child); \
|
||||||
|
+ DYNSYM (isl_schedule_node_get_ctx); \
|
||||||
|
+ DYNSYM (isl_schedule_node_get_type); \
|
||||||
|
+ DYNSYM (isl_schedule_node_n_children); \
|
||||||
|
+ DYNSYM (isl_union_map_is_equal); \
|
||||||
|
+ DYNSYM (isl_union_access_info_compute_flow); \
|
||||||
|
+ DYNSYM (isl_union_access_info_from_sink); \
|
||||||
|
+ DYNSYM (isl_union_access_info_set_may_source); \
|
||||||
|
+ DYNSYM (isl_union_access_info_set_must_source); \
|
||||||
|
+ DYNSYM (isl_union_access_info_set_schedule); \
|
||||||
|
+ DYNSYM (isl_union_flow_free); \
|
||||||
|
+ DYNSYM (isl_union_flow_get_may_dependence); \
|
||||||
|
+ DYNSYM (isl_union_flow_get_must_dependence); \
|
||||||
|
+ DYNSYM (isl_aff_var_on_domain); \
|
||||||
|
+ DYNSYM (isl_multi_aff_from_aff); \
|
||||||
|
+ DYNSYM (isl_schedule_get_ctx); \
|
||||||
|
+ DYNSYM (isl_multi_aff_set_tuple_id); \
|
||||||
|
+ DYNSYM (isl_multi_aff_dim); \
|
||||||
|
+ DYNSYM (isl_schedule_get_domain); \
|
||||||
|
+ DYNSYM (isl_union_set_is_empty); \
|
||||||
|
+ DYNSYM (isl_union_set_get_space); \
|
||||||
|
+ DYNSYM (isl_union_pw_multi_aff_empty); \
|
||||||
|
+ DYNSYM (isl_union_set_foreach_set); \
|
||||||
|
+ DYNSYM (isl_union_set_free); \
|
||||||
|
+ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \
|
||||||
|
+ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \
|
||||||
|
+ DYNSYM (isl_schedule_insert_partial_schedule); \
|
||||||
|
+ DYNSYM (isl_union_pw_multi_aff_free); \
|
||||||
|
+ DYNSYM (isl_pw_multi_aff_project_out_map); \
|
||||||
|
+ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \
|
||||||
|
+ DYNSYM (isl_schedule_from_domain); \
|
||||||
|
+ DYNSYM (isl_schedule_sequence); \
|
||||||
|
+ DYNSYM (isl_ast_build_node_from_schedule); \
|
||||||
|
+ DYNSYM (isl_ast_node_mark_get_node); \
|
||||||
|
+ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \
|
||||||
|
+ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \
|
||||||
|
+ DYNSYM (isl_val_n_abs_num_chunks); \
|
||||||
|
+ DYNSYM (isl_val_get_abs_num_chunks); \
|
||||||
|
+ DYNSYM (isl_val_int_from_chunks); \
|
||||||
|
+ DYNSYM (isl_val_is_neg); \
|
||||||
|
+ DYNSYM (isl_version); \
|
||||||
|
+ DYNSYM (isl_options_get_on_error); \
|
||||||
|
+ DYNSYM (isl_ctx_reset_error);
|
||||||
|
+
|
||||||
|
+extern struct isl_pointers_s__
|
||||||
|
+{
|
||||||
|
+ bool inited;
|
||||||
|
+ void *h;
|
||||||
|
+#define DYNSYM(x) __typeof (x) *p_##x
|
||||||
|
+ DYNSYMS
|
||||||
|
+#undef DYNSYM
|
||||||
|
+} isl_pointers__;
|
||||||
|
+
|
||||||
|
+#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si)
|
||||||
|
+#define isl_aff_free (*isl_pointers__.p_isl_aff_free)
|
||||||
|
+#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space)
|
||||||
|
+#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si)
|
||||||
|
+#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si)
|
||||||
|
+#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain)
|
||||||
|
+#define isl_band_free (*isl_pointers__.p_isl_band_free)
|
||||||
|
+#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children)
|
||||||
|
+#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule)
|
||||||
|
+#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children)
|
||||||
|
+#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free)
|
||||||
|
+#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band)
|
||||||
|
+#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx)
|
||||||
|
+#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band)
|
||||||
|
+#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member)
|
||||||
|
+#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint)
|
||||||
|
+#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out)
|
||||||
|
+#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe)
|
||||||
|
+#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si)
|
||||||
|
+#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si)
|
||||||
|
+#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc)
|
||||||
|
+#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free)
|
||||||
|
+#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc)
|
||||||
|
+#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc)
|
||||||
|
+#define isl_id_copy (*isl_pointers__.p_isl_id_copy)
|
||||||
|
+#define isl_id_free (*isl_pointers__.p_isl_id_free)
|
||||||
|
+#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc)
|
||||||
|
+#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy)
|
||||||
|
+#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free)
|
||||||
|
+#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space)
|
||||||
|
+#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range)
|
||||||
|
+#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint)
|
||||||
|
+#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims)
|
||||||
|
+#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params)
|
||||||
|
+#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range)
|
||||||
|
+#define isl_map_copy (*isl_pointers__.p_isl_map_copy)
|
||||||
|
+#define isl_map_dim (*isl_pointers__.p_isl_map_dim)
|
||||||
|
+#define isl_map_dump (*isl_pointers__.p_isl_map_dump)
|
||||||
|
+#define isl_map_equate (*isl_pointers__.p_isl_map_equate)
|
||||||
|
+#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si)
|
||||||
|
+#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product)
|
||||||
|
+#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product)
|
||||||
|
+#define isl_map_free (*isl_pointers__.p_isl_map_free)
|
||||||
|
+#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map)
|
||||||
|
+#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff)
|
||||||
|
+#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map)
|
||||||
|
+#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx)
|
||||||
|
+#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space)
|
||||||
|
+#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id)
|
||||||
|
+#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims)
|
||||||
|
+#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect)
|
||||||
|
+#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain)
|
||||||
|
+#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range)
|
||||||
|
+#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty)
|
||||||
|
+#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge)
|
||||||
|
+#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le)
|
||||||
|
+#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out)
|
||||||
|
+#define isl_map_range (*isl_pointers__.p_isl_map_range)
|
||||||
|
+#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
|
||||||
|
+#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
|
||||||
|
+#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
|
||||||
|
+#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
|
||||||
|
+#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
|
||||||
|
+#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
|
||||||
|
+#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
|
||||||
|
+#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
|
||||||
|
+#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff)
|
||||||
|
+#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint)
|
||||||
|
+#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map)
|
||||||
|
+#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set)
|
||||||
|
+#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file)
|
||||||
|
+#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add)
|
||||||
|
+#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc)
|
||||||
|
+#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy)
|
||||||
|
+#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set)
|
||||||
|
+#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free)
|
||||||
|
+#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff)
|
||||||
|
+#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set)
|
||||||
|
+#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set)
|
||||||
|
+#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst)
|
||||||
|
+#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set)
|
||||||
|
+#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set)
|
||||||
|
+#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul)
|
||||||
|
+#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set)
|
||||||
|
+#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set)
|
||||||
|
+#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id)
|
||||||
|
+#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub)
|
||||||
|
+#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set)
|
||||||
|
+#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free)
|
||||||
|
+#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest)
|
||||||
|
+#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint)
|
||||||
|
+#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims)
|
||||||
|
+#define isl_set_apply (*isl_pointers__.p_isl_set_apply)
|
||||||
|
+#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce)
|
||||||
|
+#define isl_set_copy (*isl_pointers__.p_isl_set_copy)
|
||||||
|
+#define isl_set_dim (*isl_pointers__.p_isl_set_dim)
|
||||||
|
+#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si)
|
||||||
|
+#define isl_set_free (*isl_pointers__.p_isl_set_free)
|
||||||
|
+#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space)
|
||||||
|
+#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id)
|
||||||
|
+#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect)
|
||||||
|
+#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty)
|
||||||
|
+#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim)
|
||||||
|
+#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe)
|
||||||
|
+#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out)
|
||||||
|
+#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id)
|
||||||
|
+#define isl_set_universe (*isl_pointers__.p_isl_set_universe)
|
||||||
|
+#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims)
|
||||||
|
+#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc)
|
||||||
|
+#define isl_space_copy (*isl_pointers__.p_isl_space_copy)
|
||||||
|
+#define isl_space_dim (*isl_pointers__.p_isl_space_dim)
|
||||||
|
+#define isl_space_domain (*isl_pointers__.p_isl_space_domain)
|
||||||
|
+#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id)
|
||||||
|
+#define isl_space_free (*isl_pointers__.p_isl_space_free)
|
||||||
|
+#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain)
|
||||||
|
+#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id)
|
||||||
|
+#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc)
|
||||||
|
+#define isl_space_range (*isl_pointers__.p_isl_space_range)
|
||||||
|
+#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc)
|
||||||
|
+#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id)
|
||||||
|
+#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id)
|
||||||
|
+#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map)
|
||||||
|
+#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params)
|
||||||
|
+#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain)
|
||||||
|
+#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range)
|
||||||
|
+#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow)
|
||||||
|
+#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy)
|
||||||
|
+#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty)
|
||||||
|
+#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product)
|
||||||
|
+#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map)
|
||||||
|
+#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free)
|
||||||
|
+#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map)
|
||||||
|
+#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx)
|
||||||
|
+#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space)
|
||||||
|
+#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain)
|
||||||
|
+#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range)
|
||||||
|
+#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain)
|
||||||
|
+#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty)
|
||||||
|
+#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract)
|
||||||
|
+#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union)
|
||||||
|
+#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set)
|
||||||
|
+#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule)
|
||||||
|
+#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy)
|
||||||
|
+#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty)
|
||||||
|
+#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set)
|
||||||
|
+#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val)
|
||||||
|
+#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val)
|
||||||
|
+#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx)
|
||||||
|
+#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val)
|
||||||
|
+#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule)
|
||||||
|
+#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free)
|
||||||
|
+#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context)
|
||||||
|
+#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx)
|
||||||
|
+#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule)
|
||||||
|
+#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space)
|
||||||
|
+#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for)
|
||||||
|
+#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options)
|
||||||
|
+#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free)
|
||||||
|
+#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val)
|
||||||
|
+#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx)
|
||||||
|
+#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id)
|
||||||
|
+#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg)
|
||||||
|
+#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg)
|
||||||
|
+#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type)
|
||||||
|
+#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type)
|
||||||
|
+#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val)
|
||||||
|
+#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub)
|
||||||
|
+#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children)
|
||||||
|
+#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body)
|
||||||
|
+#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond)
|
||||||
|
+#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc)
|
||||||
|
+#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init)
|
||||||
|
+#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator)
|
||||||
|
+#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free)
|
||||||
|
+#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation)
|
||||||
|
+#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type)
|
||||||
|
+#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond)
|
||||||
|
+#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else)
|
||||||
|
+#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then)
|
||||||
|
+#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free)
|
||||||
|
+#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node)
|
||||||
|
+#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node)
|
||||||
|
+#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr)
|
||||||
|
+#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val)
|
||||||
|
+#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val)
|
||||||
|
+#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user)
|
||||||
|
+#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx)
|
||||||
|
+#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val)
|
||||||
|
+#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound)
|
||||||
|
+#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node)
|
||||||
|
+#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str)
|
||||||
|
+#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format)
|
||||||
|
+#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val)
|
||||||
|
+#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule)
|
||||||
|
+#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain)
|
||||||
|
+#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence)
|
||||||
|
+#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity)
|
||||||
|
+#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity)
|
||||||
|
+#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id)
|
||||||
|
+#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val)
|
||||||
|
+#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val)
|
||||||
|
+#define isl_set_params (*isl_pointers__.p_isl_set_params)
|
||||||
|
+#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params)
|
||||||
|
+#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range)
|
||||||
|
+#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name)
|
||||||
|
+#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap)
|
||||||
|
+#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range)
|
||||||
|
+#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range)
|
||||||
|
+#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union)
|
||||||
|
+#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe)
|
||||||
|
+#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp)
|
||||||
|
+#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui)
|
||||||
|
+#define isl_val_copy (*isl_pointers__.p_isl_val_copy)
|
||||||
|
+#define isl_val_free (*isl_pointers__.p_isl_val_free)
|
||||||
|
+#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si)
|
||||||
|
+#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui)
|
||||||
|
+#define isl_val_mul (*isl_pointers__.p_isl_val_mul)
|
||||||
|
+#define isl_val_neg (*isl_pointers__.p_isl_val_neg)
|
||||||
|
+#define isl_val_sub (*isl_pointers__.p_isl_val_sub)
|
||||||
|
+#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map)
|
||||||
|
+#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx)
|
||||||
|
+#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int)
|
||||||
|
+#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations)
|
||||||
|
+#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations)
|
||||||
|
+#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error)
|
||||||
|
+#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations)
|
||||||
|
+#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce)
|
||||||
|
+#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
|
||||||
|
+#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
|
||||||
|
+#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
|
||||||
|
+#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
|
||||||
|
+#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
|
||||||
|
+#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
|
||||||
|
+#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops)
|
||||||
|
+#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy)
|
||||||
|
+#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map)
|
||||||
|
+#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up)
|
||||||
|
+#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable)
|
||||||
|
+#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space)
|
||||||
|
+#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile)
|
||||||
|
+#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child)
|
||||||
|
+#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free)
|
||||||
|
+#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child)
|
||||||
|
+#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx)
|
||||||
|
+#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type)
|
||||||
|
+#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children)
|
||||||
|
+#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal)
|
||||||
|
+#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow)
|
||||||
|
+#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink)
|
||||||
|
+#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source)
|
||||||
|
+#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source)
|
||||||
|
+#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule)
|
||||||
|
+#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free)
|
||||||
|
+#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence)
|
||||||
|
+#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence)
|
||||||
|
+#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain)
|
||||||
|
+#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff)
|
||||||
|
+#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx)
|
||||||
|
+#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id)
|
||||||
|
+#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim)
|
||||||
|
+#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain)
|
||||||
|
+#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty)
|
||||||
|
+#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space)
|
||||||
|
+#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty)
|
||||||
|
+#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set)
|
||||||
|
+#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free)
|
||||||
|
+#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff)
|
||||||
|
+#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff)
|
||||||
|
+#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule)
|
||||||
|
+#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free)
|
||||||
|
+#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map)
|
||||||
|
+#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff)
|
||||||
|
+#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain)
|
||||||
|
+#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence)
|
||||||
|
+#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule)
|
||||||
|
+#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
|
||||||
|
+#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
|
||||||
|
+#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
|
||||||
|
+#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks)
|
||||||
|
+#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks)
|
||||||
|
+#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks)
|
||||||
|
+#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg)
|
||||||
|
+#define isl_version (*isl_pointers__.p_isl_version)
|
||||||
|
+#define isl_options_get_on_error (*isl_pointers__.p_isl_options_get_on_error)
|
||||||
|
+#define isl_ctx_reset_error (*isl_pointers__.p_isl_ctx_reset_error)
|
||||||
|
+
|
||||||
|
typedef struct poly_dr *poly_dr_p;
|
||||||
|
|
||||||
|
typedef struct poly_bb *poly_bb_p;
|
||||||
|
@@ -448,5 +1033,6 @@ extern tree cached_scalar_evolution_in_r
|
||||||
|
extern void dot_all_sese (FILE *, vec<sese_l> &);
|
||||||
|
extern void dot_sese (sese_l &);
|
||||||
|
extern void dot_cfg ();
|
||||||
|
+extern const char *get_isl_version (bool);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100
|
||||||
|
+++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100
|
||||||
|
@@ -60,6 +60,35 @@ along with GCC; see the file COPYING3.
|
||||||
|
#include "tree-into-ssa.h"
|
||||||
|
#include "graphite.h"
|
||||||
|
|
||||||
|
+__typeof (isl_pointers__) isl_pointers__;
|
||||||
|
+
|
||||||
|
+static bool
|
||||||
|
+init_isl_pointers (void)
|
||||||
|
+{
|
||||||
|
+ void *h;
|
||||||
|
+
|
||||||
|
+ if (isl_pointers__.inited)
|
||||||
|
+ return isl_pointers__.h != NULL;
|
||||||
|
+ h = dlopen ("libisl.so.15", RTLD_LAZY);
|
||||||
|
+ isl_pointers__.h = h;
|
||||||
|
+ if (h == NULL)
|
||||||
|
+ return false;
|
||||||
|
+#define DYNSYM(x) \
|
||||||
|
+ do \
|
||||||
|
+ { \
|
||||||
|
+ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \
|
||||||
|
+ u.q = dlsym (h, #x); \
|
||||||
|
+ if (u.q == NULL) \
|
||||||
|
+ return false; \
|
||||||
|
+ isl_pointers__.p_##x = u.p; \
|
||||||
|
+ } \
|
||||||
|
+ while (0)
|
||||||
|
+ DYNSYMS
|
||||||
|
+#undef DYNSYM
|
||||||
|
+ isl_pointers__.inited = true;
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Print global statistics to FILE. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -365,6 +394,15 @@ graphite_transform_loops (void)
|
||||||
|
if (parallelized_function_p (cfun->decl))
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ if (number_of_loops (cfun) <= 1)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (!init_isl_pointers ())
|
||||||
|
+ {
|
||||||
|
+ sorry ("Graphite loop optimizations cannot be used");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
calculate_dominance_info (CDI_DOMINATORS);
|
||||||
|
|
||||||
|
/* We rely on post-dominators during merging of SESE regions so those
|
||||||
|
@@ -455,6 +493,14 @@ graphite_transform_loops (void)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+const char *
|
||||||
|
+get_isl_version (bool force)
|
||||||
|
+{
|
||||||
|
+ if (force)
|
||||||
|
+ init_isl_pointers ();
|
||||||
|
+ return (isl_pointers__.inited && isl_version) ? isl_version () : "none";
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#else /* If isl is not available: #ifndef HAVE_isl. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
--- gcc/toplev.c.jj 2017-02-19 13:02:31.000000000 +0100
|
||||||
|
+++ gcc/toplev.c 2017-02-19 16:50:25.536301350 +0100
|
||||||
|
@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
|
||||||
|
|
||||||
|
#ifdef HAVE_isl
|
||||||
|
#include <isl/version.h>
|
||||||
|
+extern const char *get_isl_version (bool);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void general_init (const char *, bool);
|
||||||
|
@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
|
||||||
|
#ifndef HAVE_isl
|
||||||
|
"none"
|
||||||
|
#else
|
||||||
|
- isl_version ()
|
||||||
|
+ get_isl_version (*indent == 0)
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
|
71
SOURCES/gcc11-isl-dl2.patch
Normal file
71
SOURCES/gcc11-isl-dl2.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
2011-04-04 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* toplev.c (toplev_main_argv): New variable.
|
||||||
|
(toplev_main): Initialize it.
|
||||||
|
* graphite.c (init_isl_pointers): Load libisl.so.15 from gcc's private
|
||||||
|
directory.
|
||||||
|
|
||||||
|
--- gcc/toplev.c.jj 2008-12-09 23:59:10.000000000 +0100
|
||||||
|
+++ gcc/toplev.c 2009-01-27 14:33:52.000000000 +0100
|
||||||
|
@@ -117,6 +117,8 @@ static void compile_file (void);
|
||||||
|
/* True if we don't need a backend (e.g. preprocessing only). */
|
||||||
|
static bool no_backend;
|
||||||
|
|
||||||
|
+const char **toplev_main_argv;
|
||||||
|
+
|
||||||
|
/* Decoded options, and number of such options. */
|
||||||
|
struct cl_decoded_option *save_decoded_options;
|
||||||
|
unsigned int save_decoded_options_count;
|
||||||
|
@@ -2287,6 +2289,8 @@ toplev::main (int argc, char **argv)
|
||||||
|
|
||||||
|
expandargv (&argc, &argv);
|
||||||
|
|
||||||
|
+ toplev_main_argv = CONST_CAST2 (const char **, char **, argv);
|
||||||
|
+
|
||||||
|
/* Initialization of GCC's environment, and diagnostics. */
|
||||||
|
general_init (argv[0], m_init_signals);
|
||||||
|
|
||||||
|
--- gcc/graphite.c.jj 2010-12-01 10:24:32.000000000 -0500
|
||||||
|
+++ gcc/graphite.c 2010-12-01 11:46:07.832118193 -0500
|
||||||
|
@@ -64,11 +64,39 @@ __typeof (isl_pointers__) isl_pointers__
|
||||||
|
static bool
|
||||||
|
init_isl_pointers (void)
|
||||||
|
{
|
||||||
|
- void *h;
|
||||||
|
+ void *h = NULL;
|
||||||
|
+ extern const char **toplev_main_argv;
|
||||||
|
+ char *buf, *p;
|
||||||
|
+ size_t len;
|
||||||
|
|
||||||
|
if (isl_pointers__.inited)
|
||||||
|
return isl_pointers__.h != NULL;
|
||||||
|
- h = dlopen ("libisl.so.15", RTLD_LAZY);
|
||||||
|
+ len = progname - toplev_main_argv[0];
|
||||||
|
+ buf = XALLOCAVAR (char, len + sizeof "libisl.so.15");
|
||||||
|
+ memcpy (buf, toplev_main_argv[0], len);
|
||||||
|
+ strcpy (buf + len, "libisl.so.15");
|
||||||
|
+ len += sizeof "libisl.so.15";
|
||||||
|
+ p = strstr (buf, "/libexec/");
|
||||||
|
+ if (p != NULL)
|
||||||
|
+ {
|
||||||
|
+ while (1)
|
||||||
|
+ {
|
||||||
|
+ char *q = strstr (p + 8, "/libexec/");
|
||||||
|
+ if (q == NULL)
|
||||||
|
+ break;
|
||||||
|
+ p = q;
|
||||||
|
+ }
|
||||||
|
+ memmove (p + 4, p + 8, len - (p + 8 - buf));
|
||||||
|
+ h = dlopen (buf, RTLD_LAZY);
|
||||||
|
+ if (h == NULL)
|
||||||
|
+ {
|
||||||
|
+ len = progname - toplev_main_argv[0];
|
||||||
|
+ memcpy (buf, toplev_main_argv[0], len);
|
||||||
|
+ strcpy (buf + len, "libisl.so.15");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (h == NULL)
|
||||||
|
+ h = dlopen (buf, RTLD_LAZY);
|
||||||
|
isl_pointers__.h = h;
|
||||||
|
if (h == NULL)
|
||||||
|
return false;
|
14
SOURCES/gcc11-libgcc-hardened.patch
Normal file
14
SOURCES/gcc11-libgcc-hardened.patch
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
--- libgcc/config/t-slibgcc.mp 2018-10-03 16:07:00.336990246 -0400
|
||||||
|
+++ libgcc/config/t-slibgcc 2018-10-03 16:06:26.719946740 -0400
|
||||||
|
@@ -30,9 +30,10 @@ SHLIB_LC = -lc
|
||||||
|
SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||||
|
SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
|
||||||
|
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
|
||||||
|
+SHLIB_EXTRA_LDFLAGS = -Wl,-z,relro -Wl,-z,now
|
||||||
|
|
||||||
|
SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||||
|
- $(SHLIB_LDFLAGS) \
|
||||||
|
+ $(SHLIB_LDFLAGS) $(SHLIB_EXTRA_LDFLAGS) \
|
||||||
|
-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
|
||||||
|
$(SHLIB_OBJS) $(SHLIB_LC) && \
|
||||||
|
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
|
17
SOURCES/gcc11-libgomp-omp_h-multilib.patch
Normal file
17
SOURCES/gcc11-libgomp-omp_h-multilib.patch
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
2008-06-09 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
|
||||||
|
|
||||||
|
--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
|
||||||
|
+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
|
||||||
|
@@ -42,8 +42,8 @@ typedef struct
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
|
||||||
|
- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
|
||||||
|
+ unsigned char _x[8 + sizeof (void *)]
|
||||||
|
+ __attribute__((__aligned__(sizeof (void *))));
|
||||||
|
} omp_nest_lock_t;
|
||||||
|
#endif
|
||||||
|
|
24
SOURCES/gcc11-libstdc++-docs.patch
Normal file
24
SOURCES/gcc11-libstdc++-docs.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
--- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100
|
||||||
|
+++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100
|
||||||
|
@@ -5,6 +5,8 @@
|
||||||
|
<a class="link" href="https://www.fsf.org" target="_top">FSF
|
||||||
|
</a>
|
||||||
|
</p><p>
|
||||||
|
+ Release 11.2.1
|
||||||
|
+ </p><p>
|
||||||
|
Permission is granted to copy, distribute and/or modify this
|
||||||
|
document under the terms of the GNU Free Documentation
|
||||||
|
License, Version 1.2 or any later version published by the
|
||||||
|
--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100
|
||||||
|
+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100
|
||||||
|
@@ -20,7 +20,9 @@
|
||||||
|
member functions for the library classes, finding out what is in a
|
||||||
|
particular include file, looking at inheritance diagrams, etc.
|
||||||
|
</p><p>
|
||||||
|
- The API documentation, rendered into HTML, can be viewed online
|
||||||
|
+ The API documentation, rendered into HTML, can be viewed locally
|
||||||
|
+ <a class="link" href="api/index.html" target="_top">for the 11.2.1 release</a>,
|
||||||
|
+ online
|
||||||
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
|
||||||
|
and
|
||||||
|
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">
|
27
SOURCES/gcc11-libtool-no-rpath.patch
Normal file
27
SOURCES/gcc11-libtool-no-rpath.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
libtool sucks.
|
||||||
|
--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
|
||||||
|
+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
|
||||||
|
@@ -5394,6 +5394,7 @@ EOF
|
||||||
|
rpath="$finalize_rpath"
|
||||||
|
test "$mode" != relink && rpath="$compile_rpath$rpath"
|
||||||
|
for libdir in $rpath; do
|
||||||
|
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||||
|
if test -n "$hardcode_libdir_flag_spec"; then
|
||||||
|
if test -n "$hardcode_libdir_separator"; then
|
||||||
|
if test -z "$hardcode_libdirs"; then
|
||||||
|
@@ -6071,6 +6072,7 @@ EOF
|
||||||
|
rpath=
|
||||||
|
hardcode_libdirs=
|
||||||
|
for libdir in $compile_rpath $finalize_rpath; do
|
||||||
|
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||||
|
if test -n "$hardcode_libdir_flag_spec"; then
|
||||||
|
if test -n "$hardcode_libdir_separator"; then
|
||||||
|
if test -z "$hardcode_libdirs"; then
|
||||||
|
@@ -6120,6 +6122,7 @@ EOF
|
||||||
|
rpath=
|
||||||
|
hardcode_libdirs=
|
||||||
|
for libdir in $finalize_rpath; do
|
||||||
|
+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
|
||||||
|
if test -n "$hardcode_libdir_flag_spec"; then
|
||||||
|
if test -n "$hardcode_libdir_separator"; then
|
||||||
|
if test -z "$hardcode_libdirs"; then
|
37
SOURCES/gcc11-no-add-needed.patch
Normal file
37
SOURCES/gcc11-no-add-needed.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
2010-02-08 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
|
* config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker.
|
||||||
|
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||||
|
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||||
|
|
||||||
|
--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100
|
||||||
|
+++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100
|
||||||
|
@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||||
|
I imagine that other systems will catch up. In the meantime, it
|
||||||
|
doesn't harm to make sure that the data exists to be used later. */
|
||||||
|
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||||
|
-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||||
|
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
||||||
|
#endif
|
||||||
|
--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
|
||||||
|
+++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100
|
||||||
|
@@ -76,7 +76,7 @@ do { \
|
||||||
|
Signalize that because we have fde-glibc, we don't need all C shared libs
|
||||||
|
linked against -lgcc_s. */
|
||||||
|
#undef LINK_EH_SPEC
|
||||||
|
-#define LINK_EH_SPEC ""
|
||||||
|
+#define LINK_EH_SPEC "--no-add-needed "
|
||||||
|
|
||||||
|
#undef TARGET_INIT_LIBFUNCS
|
||||||
|
#define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
|
||||||
|
--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
|
||||||
|
+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
|
||||||
|
@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI
|
||||||
|
#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
|
||||||
|
|
||||||
|
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||||
|
-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||||
|
+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
|
30
SOURCES/gcc11-rh1574936.patch
Normal file
30
SOURCES/gcc11-rh1574936.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
crt files and statically linked libgcc objects cause false positives
|
||||||
|
in annobin coverage, so we add the assembler flag to generate notes
|
||||||
|
for them.
|
||||||
|
|
||||||
|
The patch also adds notes to libgcc_s.so, but this is harmless because
|
||||||
|
these notes only confer that there is no other annobin markup.
|
||||||
|
|
||||||
|
2018-07-25 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add
|
||||||
|
-Wa,--generate-missing-build-notes=yes.
|
||||||
|
|
||||||
|
--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
|
||||||
|
+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
|
||||||
|
@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g
|
||||||
|
LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
|
||||||
|
$(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
|
||||||
|
-fbuilding-libgcc -fno-stack-protector \
|
||||||
|
+ -Wa,--generate-missing-build-notes=yes \
|
||||||
|
$(INHIBIT_LIBC_CFLAGS)
|
||||||
|
|
||||||
|
# Additional options to use when compiling libgcc2.a.
|
||||||
|
@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN
|
||||||
|
$(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
|
||||||
|
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
|
||||||
|
-fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
|
||||||
|
+ -Wa,--generate-missing-build-notes=yes \
|
||||||
|
$(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
|
||||||
|
|
||||||
|
# Extra flags to use when compiling crt{begin,end}.o.
|
40
SOURCES/gcc11-sparc-config-detection.patch
Normal file
40
SOURCES/gcc11-sparc-config-detection.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
|
||||||
|
+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
|
||||||
|
@@ -2790,7 +2790,7 @@ sparc-*-rtems*)
|
||||||
|
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
|
||||||
|
tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
|
||||||
|
;;
|
||||||
|
-sparc-*-linux*)
|
||||||
|
+sparc-*-linux* | sparcv9-*-linux*)
|
||||||
|
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
|
||||||
|
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||||
|
case ${target} in
|
||||||
|
@@ -2844,7 +2844,7 @@ sparc64-*-rtems*)
|
||||||
|
extra_options="${extra_options}"
|
||||||
|
tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
|
||||||
|
;;
|
||||||
|
-sparc64-*-linux*)
|
||||||
|
+sparc64*-*-linux*)
|
||||||
|
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h"
|
||||||
|
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||||
|
tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
|
||||||
|
--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
|
||||||
|
+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
|
||||||
|
@@ -1002,7 +1002,7 @@ sparc-*-elf*)
|
||||||
|
tmake_file="${tmake_file} t-fdpbit t-crtfm"
|
||||||
|
extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
|
||||||
|
;;
|
||||||
|
-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||||
|
+sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||||
|
tmake_file="${tmake_file} t-crtfm"
|
||||||
|
if test "${host_address}" = 64; then
|
||||||
|
tmake_file="$tmake_file sparc/t-linux64"
|
||||||
|
@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
|
||||||
|
tmake_file="$tmake_file t-crtfm"
|
||||||
|
extra_parts="$extra_parts crtfastmath.o"
|
||||||
|
;;
|
||||||
|
-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||||
|
+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||||
|
extra_parts="$extra_parts crtfastmath.o"
|
||||||
|
tmake_file="${tmake_file} t-crtfm sparc/t-linux"
|
||||||
|
if test "${host_address}" = 64; then
|
38
SOURCES/gcc11-tsan-sigstksz.patch
Normal file
38
SOURCES/gcc11-tsan-sigstksz.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 91f8a7a34cf29ae7c465603a801326767f1cc7e9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Martin Liska <mliska@suse.cz>
|
||||||
|
Date: Thu, 5 Aug 2021 10:43:17 +0200
|
||||||
|
Subject: [PATCH] sanitizer: cherry pick
|
||||||
|
414482751452e54710f16bae58458c66298aaf69
|
||||||
|
|
||||||
|
The patch is needed in order to support recent glibc (2.34).
|
||||||
|
|
||||||
|
libsanitizer/ChangeLog:
|
||||||
|
|
||||||
|
PR sanitizer/101749
|
||||||
|
* sanitizer_common/sanitizer_posix_libcdep.cpp: Prevent
|
||||||
|
generation of dependency on _cxa_guard for static
|
||||||
|
initialization.
|
||||||
|
---
|
||||||
|
libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp | 7 ++++---
|
||||||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
|
||||||
|
index 7ff48c35851..a65b16f5290 100644
|
||||||
|
--- a/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
|
||||||
|
+++ b/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cpp
|
||||||
|
@@ -166,9 +166,10 @@ bool SupportsColoredOutput(fd_t fd) {
|
||||||
|
#if !SANITIZER_GO
|
||||||
|
// TODO(glider): different tools may require different altstack size.
|
||||||
|
static uptr GetAltStackSize() {
|
||||||
|
- // SIGSTKSZ is not enough.
|
||||||
|
- static const uptr kAltStackSize = SIGSTKSZ * 4;
|
||||||
|
- return kAltStackSize;
|
||||||
|
+ // Note: since GLIBC_2.31, SIGSTKSZ may be a function call, so this may be
|
||||||
|
+ // more costly that you think. However GetAltStackSize is only call 2-3 times
|
||||||
|
+ // per thread so don't cache the evaluation.
|
||||||
|
+ return SIGSTKSZ * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAlternateSignalStack() {
|
||||||
|
--
|
||||||
|
2.27.0
|
3716
SPECS/gcc.spec
Normal file
3716
SPECS/gcc.spec
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user