import gcc-toolset-9-gcc-9.1.1-1.el8
This commit is contained in:
commit
e2d5a87755
4
.gcc-toolset-9-gcc.metadata
Normal file
4
.gcc-toolset-9-gcc.metadata
Normal file
@ -0,0 +1,4 @@
|
||||
7f4348418dc3efefd357b32a2b5c8010211ab284 SOURCES/doxygen-1.8.0.src.tar.gz
|
||||
574d80f9840124e0ad45b84e8a59b29419726ce8 SOURCES/gcc-9.1.1-20190503.tar.xz
|
||||
c5a2b201bf05229647e73203c0bf2d9679d4d21f SOURCES/isl-0.16.1.tar.bz2
|
||||
5ef03ca7aee134fe7dfecb6c9d048799f0810278 SOURCES/mpc-0.8.1.tar.gz
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
SOURCES/doxygen-1.8.0.src.tar.gz
|
||||
SOURCES/gcc-9.1.1-20190503.tar.xz
|
||||
SOURCES/isl-0.16.1.tar.bz2
|
||||
SOURCES/mpc-0.8.1.tar.gz
|
@ -0,0 +1,81 @@
|
||||
From f96f2f273741ea19311c6e7a6f556c09b6ff9415 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Doffman <mark.doffman@codethink.co.uk>
|
||||
Date: Tue, 23 Jun 2015 22:59:08 +0000
|
||||
Subject: [PATCH 01/23] Allow repeated compatible type specifications.
|
||||
|
||||
Add a check to see if a repeated type specification is compatible
|
||||
with the previous specification. Only create an error on incompatible
|
||||
type specifications for the same symbol.
|
||||
|
||||
Some fixes by Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
---
|
||||
|
||||
0001-Allow-repeated-compatible-type-specifications.patch
|
||||
|
||||
0015-Allow-redefinition-of-types-for-procedures.patch
|
||||
|
||||
0021-Correct-internal-fault-in-select_type_9.f90.patch
|
||||
|
||||
|
||||
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
|
||||
index ec43e63..67ad504 100644
|
||||
--- a/gcc/fortran/symbol.c
|
||||
+++ b/gcc/fortran/symbol.c
|
||||
@@ -1877,6 +1877,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)
|
||||
@@ -1886,6 +1888,20 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
|
||||
gfc_error ("Symbol %qs at %L conflicts with symbol from module %qs, "
|
||||
"use-associated at %L", sym->name, where, sym->module,
|
||||
&sym->declared_at);
|
||||
+ else if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ /* 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));
|
||||
@@ -1899,8 +1915,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 0000000..cdd29ea
|
||||
--- /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
|
@ -0,0 +1,106 @@
|
||||
From 40d6590b03a9f92c19b7097b1cae296276d6ce22 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Mon, 28 Sep 2015 16:06:30 +0100
|
||||
Subject: [PATCH 02/23] Pad character-to-int conversions with spaces instead of
|
||||
zeros.
|
||||
|
||||
The pad character is 'undefined' or 'processor dependent' depending on which
|
||||
standard you read. This makes it 0x20 which matches the Oracle Fortran
|
||||
compiler. One of the tests tests this undefined behaviour, so I had to modify
|
||||
it.
|
||||
|
||||
0002-Pad-character-to-int-conversions-with-spaces-instead.patch
|
||||
|
||||
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||
index 4808c27..93908f8 100644
|
||||
--- a/gcc/fortran/lang.opt
|
||||
+++ b/gcc/fortran/lang.opt
|
||||
@@ -428,6 +428,10 @@ fdec
|
||||
Fortran Var(flag_dec)
|
||||
Enable all DEC language extensions.
|
||||
|
||||
+fdec-pad-with-spaces
|
||||
+Fortran Var(flag_dec_pad_with_spaces)
|
||||
+For character to integer conversions, use spaces for the pad rather than NUL.
|
||||
+
|
||||
fdec-intrinsic-ints
|
||||
Fortran Var(flag_dec_intrinsic_ints)
|
||||
Enable kind-specific variants of integer intrinsic functions.
|
||||
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
|
||||
index d12ae5f..09da1d2 100644
|
||||
--- a/gcc/fortran/simplify.c
|
||||
+++ b/gcc/fortran/simplify.c
|
||||
@@ -6623,7 +6623,7 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
|
||||
/* Allocate the buffer to store the binary version of the source. */
|
||||
buffer_size = MAX (source_size, result_size);
|
||||
buffer = (unsigned char*)alloca (buffer_size);
|
||||
- memset (buffer, 0, buffer_size);
|
||||
+ memset (buffer, (flag_dec_pad_with_spaces ? 0x20 : 0x0), buffer_size);
|
||||
|
||||
/* Now write source to the buffer. */
|
||||
gfc_target_encode_expr (source, buffer, buffer_size);
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/c_ptr_tests_20.f90
|
||||
@@ -0,0 +1,62 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdump-tree-optimized -O -fdec-pad-with-spaces" }
|
||||
+!
|
||||
+! PR fortran/46974
|
||||
+
|
||||
+program test
|
||||
+ use ISO_C_BINDING
|
||||
+ implicit none
|
||||
+ type(c_ptr) :: m
|
||||
+ integer(c_intptr_t) :: a
|
||||
+ integer(transfer(transfer(4_c_intptr_t, c_null_ptr),1_c_intptr_t)) :: b
|
||||
+ a = transfer (transfer("ABCE", m), 1_c_intptr_t)
|
||||
+ print '(z8)', a
|
||||
+ if ( int(z'45434241') /= a &
|
||||
+ .and. int(z'41424345') /= a &
|
||||
+ .and. int(z'4142434520202020',kind=8) /= a &
|
||||
+ .and. int(z'2020202045434241',kind=8) /= a ) &
|
||||
+ call i_do_not_exist()
|
||||
+end program test
|
||||
+
|
||||
+! Examples contributed by Steve Kargl and James Van Buskirk
|
||||
+
|
||||
+subroutine bug1
|
||||
+ use ISO_C_BINDING
|
||||
+ implicit none
|
||||
+ type(c_ptr) :: m
|
||||
+ type mytype
|
||||
+ integer a, b, c
|
||||
+ end type mytype
|
||||
+ type(mytype) x
|
||||
+ print *, transfer(32512, x) ! Works.
|
||||
+ print *, transfer(32512, m) ! Caused ICE.
|
||||
+end subroutine bug1
|
||||
+
|
||||
+subroutine bug6
|
||||
+ use ISO_C_BINDING
|
||||
+ implicit none
|
||||
+ interface
|
||||
+ function fun()
|
||||
+ use ISO_C_BINDING
|
||||
+ implicit none
|
||||
+ type(C_FUNPTR) fun
|
||||
+ end function fun
|
||||
+ end interface
|
||||
+ type(C_PTR) array(2)
|
||||
+ type(C_FUNPTR) result
|
||||
+ integer(C_INTPTR_T), parameter :: const(*) = [32512,32520]
|
||||
+
|
||||
+ result = fun()
|
||||
+ array = transfer([integer(C_INTPTR_T)::32512,32520],array)
|
||||
+! write(*,*) transfer(result,const)
|
||||
+! write(*,*) transfer(array,const)
|
||||
+end subroutine bug6
|
||||
+
|
||||
+function fun()
|
||||
+ use ISO_C_BINDING
|
||||
+ implicit none
|
||||
+ type(C_FUNPTR) fun
|
||||
+ fun = transfer(32512_C_INTPTR_T,fun)
|
||||
+end function fun
|
||||
+
|
||||
+! { dg-final { scan-tree-dump-times "i_do_not_exist" 0 "optimized" } }
|
54
SOURCES/0003-Add-std-extra-legacy.patch
Normal file
54
SOURCES/0003-Add-std-extra-legacy.patch
Normal file
@ -0,0 +1,54 @@
|
||||
From d1bb76287ec58fdde7ced70088559136555bd7bd Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Fri, 11 Dec 2015 17:04:09 +0000
|
||||
Subject: [PATCH 03/23] Add -std=extra-legacy
|
||||
|
||||
|
||||
0003-Add-std-extra-legacy.patch
|
||||
|
||||
0023-Add-a-full-stop-to-the-std-extra-legacy-help-text.patch
|
||||
|
||||
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||
index 4421ce4..4808c27 100644
|
||||
--- a/gcc/fortran/lang.opt
|
||||
+++ b/gcc/fortran/lang.opt
|
||||
@@ -790,6 +790,10 @@ std=legacy
|
||||
Fortran
|
||||
Accept extensions to support legacy code.
|
||||
|
||||
+std=extra-legacy
|
||||
+Fortran
|
||||
+Accept even more legacy extensions, including things disallowed in f90.
|
||||
+
|
||||
undef
|
||||
Fortran
|
||||
; Documented in C
|
||||
diff --git a/gcc/fortran/libgfortran.h b/gcc/fortran/libgfortran.h
|
||||
index c5ff992..dcc923b 100644
|
||||
--- a/gcc/fortran/libgfortran.h
|
||||
+++ b/gcc/fortran/libgfortran.h
|
||||
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3.
|
||||
Note that no features were obsoleted nor deleted in F2003.
|
||||
Please remember to keep those definitions in sync with
|
||||
gfortran.texi. */
|
||||
+#define GFC_STD_EXTRA_LEGACY (1<<13) /* Even more backward compatibility. */
|
||||
#define GFC_STD_F2018_DEL (1<<12) /* Deleted in F2018. */
|
||||
#define GFC_STD_F2018_OBS (1<<11) /* Obsolescent in F2018. */
|
||||
#define GFC_STD_F2018 (1<<10) /* New in F2018. */
|
||||
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||
index 1af76aa..9ebf8e3 100644
|
||||
--- a/gcc/fortran/options.c
|
||||
+++ b/gcc/fortran/options.c
|
||||
@@ -733,6 +733,12 @@ gfc_handle_option (size_t scode, const char *arg, int value,
|
||||
gfc_option.warn_std = 0;
|
||||
break;
|
||||
|
||||
+ case OPT_std_extra_legacy:
|
||||
+ set_default_std_flags ();
|
||||
+ gfc_option.warn_std = 0;
|
||||
+ gfc_option.allow_std |= GFC_STD_EXTRA_LEGACY;
|
||||
+ break;
|
||||
+
|
||||
case OPT_fshort_enums:
|
||||
/* Handled in language-independent code. */
|
||||
break;
|
@ -0,0 +1,318 @@
|
||||
From 7420e95a0ebb2401d67ad405670fb6a8d33f02da Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu, 4 Feb 2016 17:18:30 +0000
|
||||
Subject: [PATCH 04/23] Allow conversion between Hollerith constants and
|
||||
CHARACTER and INTEGER
|
||||
|
||||
Warnings are raised when this happens.
|
||||
|
||||
This feature is enabled with the `-std=extra-legacy` compiler flag.
|
||||
|
||||
0004-Allow-conversion-between-Hollerith-constants-and-CHA.patch
|
||||
|
||||
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
|
||||
index 8fa305c..fc1be48 100644
|
||||
--- a/gcc/fortran/arith.c
|
||||
+++ b/gcc/fortran/arith.c
|
||||
@@ -2562,6 +2562,34 @@ hollerith2representation (gfc_expr *resu
|
||||
}
|
||||
|
||||
|
||||
+/* Helper function to set the representation in a character conversion.
|
||||
+ This assumes that the ts.type and ts.kind of the result have already
|
||||
+ been set. */
|
||||
+
|
||||
+static void
|
||||
+character2representation (gfc_expr *result, gfc_expr *src)
|
||||
+{
|
||||
+ size_t src_len, result_len;
|
||||
+ size_t i;
|
||||
+ src_len = src->value.character.length;
|
||||
+ gfc_target_expr_size (result, &result_len);
|
||||
+
|
||||
+ if (src_len > result_len)
|
||||
+ gfc_warning (0, "The character constant at %L is too long to convert to %s",
|
||||
+ &src->where, gfc_typename(&result->ts));
|
||||
+
|
||||
+ result->representation.string = XCNEWVEC (char, result_len + 1);
|
||||
+
|
||||
+ for (i = 0; i < MIN (result_len, src_len); i++)
|
||||
+ result->representation.string[i] = (char) src->value.character.string[i];
|
||||
+
|
||||
+ if (src_len < result_len)
|
||||
+ memset (&result->representation.string[src_len], ' ', result_len - src_len);
|
||||
+
|
||||
+ result->representation.string[result_len] = '\0'; /* For debugger */
|
||||
+ result->representation.length = result_len;
|
||||
+}
|
||||
+
|
||||
/* Convert Hollerith to integer. The constant will be padded or truncated. */
|
||||
|
||||
gfc_expr *
|
||||
@@ -2577,6 +2605,19 @@ gfc_hollerith2int (gfc_expr *src, int ki
|
||||
return result;
|
||||
}
|
||||
|
||||
+/* Convert character to integer. The constant will be padded or truncated. */
|
||||
+
|
||||
+gfc_expr *
|
||||
+gfc_character2int (gfc_expr *src, int kind)
|
||||
+{
|
||||
+ gfc_expr *result;
|
||||
+ result = gfc_get_constant_expr (BT_INTEGER, kind, &src->where);
|
||||
+
|
||||
+ character2representation (result, src);
|
||||
+ gfc_interpret_integer (kind, (unsigned char *) result->representation.string,
|
||||
+ result->representation.length, result->value.integer);
|
||||
+ return result;
|
||||
+}
|
||||
|
||||
/* Convert Hollerith to real. The constant will be padded or truncated. */
|
||||
|
||||
diff --git a/gcc/fortran/arith.h b/gcc/fortran/arith.h
|
||||
index 85aca5b..1f56aea 100644
|
||||
--- a/gcc/fortran/arith.h
|
||||
+++ b/gcc/fortran/arith.h
|
||||
@@ -83,6 +83,7 @@ gfc_expr *gfc_hollerith2complex (gfc_expr *, int);
|
||||
gfc_expr *gfc_hollerith2character (gfc_expr *, int);
|
||||
gfc_expr *gfc_hollerith2logical (gfc_expr *, int);
|
||||
gfc_expr *gfc_character2character (gfc_expr *, int);
|
||||
+gfc_expr *gfc_character2int (gfc_expr *, int);
|
||||
|
||||
#endif /* GFC_ARITH_H */
|
||||
|
||||
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
|
||||
index f304154..ed3d440 100644
|
||||
--- a/gcc/fortran/check.c
|
||||
+++ b/gcc/fortran/check.c
|
||||
@@ -2643,9 +2643,14 @@ gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
|
||||
}
|
||||
|
||||
|
||||
+/* This is the check function for the argument to the INT intrinsic */
|
||||
bool
|
||||
gfc_check_int (gfc_expr *x, gfc_expr *kind)
|
||||
{
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && x->ts.type == BT_CHARACTER)
|
||||
+ return true;
|
||||
+
|
||||
if (!numeric_check (x, 0))
|
||||
return false;
|
||||
|
||||
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
|
||||
index 2f60fe8..371f5b8 100644
|
||||
--- a/gcc/fortran/intrinsic.c
|
||||
+++ b/gcc/fortran/intrinsic.c
|
||||
@@ -3928,6 +3928,17 @@ add_conversions (void)
|
||||
add_conv (BT_LOGICAL, gfc_logical_kinds[j].kind,
|
||||
BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
|
||||
}
|
||||
+
|
||||
+ /* Oracle allows character values to be converted to integers,
|
||||
+ similar to Hollerith-Integer conversion - the first characters will
|
||||
+ be turned into ascii values. */
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ /* Character-Integer conversions. */
|
||||
+ for (i = 0; gfc_integer_kinds[i].kind != 0; i++)
|
||||
+ add_conv (BT_CHARACTER, gfc_default_character_kind,
|
||||
+ BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY);
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
@@ -5008,6 +5019,15 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
|
||||
gfc_typename (&from_ts), gfc_typename (ts),
|
||||
&expr->where);
|
||||
}
|
||||
+ else if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && from_ts.type == BT_CHARACTER
|
||||
+ && ts->type == BT_INTEGER)
|
||||
+ {
|
||||
+ if (warn_conversion_extra || warn_conversion)
|
||||
+ gfc_warning_now (0, "Conversion from %s to %s at %L",
|
||||
+ gfc_typename (&from_ts), gfc_typename (ts),
|
||||
+ &expr->where);
|
||||
+ }
|
||||
else
|
||||
gcc_unreachable ();
|
||||
}
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index d09cfa6..07c8c9a 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -3803,6 +3803,30 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
|
||||
return gfc_closest_fuzzy_match (op, candidates);
|
||||
}
|
||||
|
||||
+/* Return true if TYPE is character based, false otherwise. */
|
||||
+
|
||||
+static int
|
||||
+is_character_based (bt type)
|
||||
+{
|
||||
+ return type == BT_CHARACTER || type == BT_HOLLERITH;
|
||||
+}
|
||||
+
|
||||
+/* 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. */
|
||||
@@ -3976,6 +4000,38 @@ resolve_operator (gfc_expr *e)
|
||||
case INTRINSIC_EQ_OS:
|
||||
case INTRINSIC_NE:
|
||||
case INTRINSIC_NE_OS:
|
||||
+
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ convert_logical_to_integer (op1);
|
||||
+ convert_logical_to_integer (op2);
|
||||
+ }
|
||||
+
|
||||
+ /* If you're comparing hollerith contants to character expresisons,
|
||||
+ convert the hollerith constant */
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && is_character_based (op1->ts.type)
|
||||
+ && is_character_based (op2->ts.type))
|
||||
+ {
|
||||
+ gfc_typespec ts;
|
||||
+ ts.type = BT_CHARACTER;
|
||||
+ ts.kind = op1->ts.kind;
|
||||
+ if (op1->ts.type == BT_HOLLERITH)
|
||||
+ {
|
||||
+ gfc_convert_type_warn (op1, &ts, 2, 1);
|
||||
+ gfc_warning (0, "Promoting argument for comparison from HOLLERITH "
|
||||
+ "to CHARACTER at %L", &op1->where);
|
||||
+ }
|
||||
+ ts.type = BT_CHARACTER;
|
||||
+ ts.kind = op2->ts.kind;
|
||||
+ if (op2->ts.type == BT_HOLLERITH)
|
||||
+ {
|
||||
+ gfc_convert_type_warn (op2, &ts, 2, 1);
|
||||
+ gfc_warning (0, "Promoting argument for comparison from HOLLERITH "
|
||||
+ "to CHARACTER at %L", &op2->where);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
|
||||
&& op1->ts.kind == op2->ts.kind)
|
||||
{
|
||||
@@ -3984,6 +4040,29 @@ resolve_operator (gfc_expr *e)
|
||||
break;
|
||||
}
|
||||
|
||||
+ /* Numeric to hollerith comparisons */
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && gfc_numeric_ts (&op1->ts)
|
||||
+ && (op2->ts.type == BT_HOLLERITH || op2->ts.type == BT_CHARACTER))
|
||||
+ {
|
||||
+ gfc_warning (0, "Promoting argument for comparison from character type to INTEGER at %L", &op2->where);
|
||||
+ gfc_typespec ts;
|
||||
+ ts.type = BT_INTEGER;
|
||||
+ ts.kind = 4;
|
||||
+ gfc_convert_type_warn (op2, &ts, 2, 1);
|
||||
+ }
|
||||
+
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && gfc_numeric_ts (&op2->ts)
|
||||
+ && (op1->ts.type == BT_HOLLERITH || op1->ts.type == BT_CHARACTER))
|
||||
+ {
|
||||
+ gfc_warning (0, "Promoting argument for comparison from character type to INTEGER at %L", &op1->where);
|
||||
+ gfc_typespec ts;
|
||||
+ ts.type = BT_INTEGER;
|
||||
+ ts.kind = 4;
|
||||
+ gfc_convert_type_warn (op1, &ts, 2, 1);
|
||||
+ }
|
||||
+
|
||||
if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
|
||||
{
|
||||
gfc_type_convert_binary (e, 1);
|
||||
@@ -4188,7 +4267,6 @@ bad_op:
|
||||
return false;
|
||||
}
|
||||
|
||||
-
|
||||
/************** Array resolution subroutines **************/
|
||||
|
||||
enum compare_result
|
||||
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
|
||||
index 3c85c52..e03384c 100644
|
||||
--- a/gcc/fortran/simplify.c
|
||||
+++ b/gcc/fortran/simplify.c
|
||||
@@ -7987,10 +7987,19 @@ gfc_convert_constant (gfc_expr *e, bt type, int kind)
|
||||
break;
|
||||
|
||||
case BT_CHARACTER:
|
||||
- if (type == BT_CHARACTER)
|
||||
- f = gfc_character2character;
|
||||
- else
|
||||
- goto oops;
|
||||
+ switch (type)
|
||||
+ {
|
||||
+ case BT_CHARACTER:
|
||||
+ f = gfc_character2character;
|
||||
+ break;
|
||||
+
|
||||
+ case BT_INTEGER:
|
||||
+ f = gfc_character2int;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ goto oops;
|
||||
+ }
|
||||
break;
|
||||
|
||||
default:
|
||||
diff --git a/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90 b/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90
|
||||
new file mode 100644
|
||||
index 0000000..9c462b9
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/hollerith-character-comparison.f90
|
||||
@@ -0,0 +1,15 @@
|
||||
+ ! { dg-options "-std=extra-legacy" }
|
||||
+
|
||||
+ program convert
|
||||
+ REAL*4 a
|
||||
+ INTEGER*4 b
|
||||
+ b = 1000
|
||||
+ print *, 4HJMAC.eq.4HJMAC ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+ print *, 4HJMAC.eq."JMAC" ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+ print *, 4HJMAC.eq."JMAN" ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+ print *, "JMAC".eq.4HJMAN ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+ print *, "AAAA".eq.5HAAAAA ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+ print *, "BBBBB".eq.5HBBBB ! { dg-warning "Promoting argument for comparison from HOLLERITH to CHARACTER at" }
|
||||
+
|
||||
+ end program
|
||||
+
|
||||
diff --git a/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90 b/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90
|
||||
new file mode 100644
|
||||
index 0000000..f44c1f8
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/hollerith-int-comparison.f90
|
||||
@@ -0,0 +1,11 @@
|
||||
+ ! { dg-options "-std=extra-legacy" }
|
||||
+
|
||||
+ program convert
|
||||
+ INTEGER*4 b
|
||||
+ b = 5HRIVET ! { dg-warning "Legacy Extension: Hollerith constant|Conversion from HOLLERITH to INTEGER|too long to convert" }
|
||||
+ print *, 4HJMAC.eq.400 ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
|
||||
+ print *, 4HRIVE.eq.1163282770 ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
|
||||
+ print *, b
|
||||
+ print *, 1163282770.eq.4HRIVE ! { dg-warning "Legacy Extension: Hollerith constant|Promoting argument for comparison from character|Conversion from HOLLERITH to INTEGER" }
|
||||
+ end program
|
||||
+
|
1143
SOURCES/0005-Allow-comparisons-between-INTEGER-and-REAL.patch
Normal file
1143
SOURCES/0005-Allow-comparisons-between-INTEGER-and-REAL.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,70 @@
|
||||
From f50b0452c10d514860e08e1ea091b17aa97d6a90 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu, 4 Feb 2016 16:59:41 +0000
|
||||
Subject: [PATCH 06/23] Allow blank format items in format strings
|
||||
|
||||
This has to be written in a slightly verbose manner because GCC 7
|
||||
defaults to building with -Werror=implicit-fallthrough which prevents
|
||||
us from just falling through to the default: case.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
0006-Allow-blank-format-items-in-format-strings.patch
|
||||
|
||||
commit 8e205f3940a364318d0cd2197a9897142632b336
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu Feb 4 16:59:41 2016 +0000
|
||||
|
||||
Allow blank format items in format strings
|
||||
|
||||
This has to be written in a slightly verbose manner because GCC 7
|
||||
defaults to building with -Werror=implicit-fallthrough which prevents
|
||||
us from just falling through to the default: case.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
|
||||
index 0bec4ee39b2..d93dcfadd61 100644
|
||||
--- a/gcc/fortran/io.c
|
||||
+++ b/gcc/fortran/io.c
|
||||
@@ -752,6 +752,16 @@ format_item_1:
|
||||
error = unexpected_end;
|
||||
goto syntax;
|
||||
|
||||
+ case FMT_RPAREN:
|
||||
+ /* Oracle allows a blank format item. */
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ goto finished;
|
||||
+ else
|
||||
+ {
|
||||
+ error = unexpected_element;
|
||||
+ goto syntax;
|
||||
+ }
|
||||
+
|
||||
default:
|
||||
error = unexpected_element;
|
||||
goto syntax;
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_format_empty_item.f b/gcc/testsuite/gfortran.dg/dec_format_empty_item.f
|
||||
new file mode 100644
|
||||
index 00000000000..e817001e38a
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_format_empty_item.f
|
||||
@@ -0,0 +1,16 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test blank/empty format items in format string
|
||||
+!
|
||||
+ PROGRAM blank_format_items
|
||||
+ INTEGER A/0/
|
||||
+
|
||||
+ OPEN(1, status="scratch")
|
||||
+ WRITE(1, 10) 100
|
||||
+ REWIND(1)
|
||||
+ READ(1, 10) A
|
||||
+ IF (a.NE.100) STOP 1
|
||||
+ PRINT 10, A
|
||||
+10 FORMAT( I5,)
|
||||
+ END
|
@ -0,0 +1,77 @@
|
||||
From d75972937274489189a151a47da9b9aadfdefe8d Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Mon, 5 Oct 2015 13:45:15 +0100
|
||||
Subject: [PATCH 07/23] Allow more than one character as argument to ICHAR
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
commit 44861a8907c8d849193287231a464d34fcce522d
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Mon Oct 5 13:45:15 2015 +0100
|
||||
|
||||
Allow more than one character as argument to ICHAR
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
|
||||
index 4f2d21610b9..38a90519c81 100644
|
||||
--- a/gcc/fortran/check.c
|
||||
+++ b/gcc/fortran/check.c
|
||||
@@ -2472,7 +2472,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
|
||||
else
|
||||
return true;
|
||||
|
||||
- if (i != 1)
|
||||
+ if (i != 1 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
|
||||
{
|
||||
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 80c96371ad9..6e05bb444ed 100644
|
||||
--- a/gcc/fortran/simplify.c
|
||||
+++ b/gcc/fortran/simplify.c
|
||||
@@ -2774,7 +2774,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 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
|
||||
{
|
||||
gfc_error ("Argument of IACHAR at %L must be of length one", &e->where);
|
||||
return &gfc_bad_expr;
|
||||
@@ -2972,7 +2972,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 && !(gfc_option.allow_std & GFC_STD_EXTRA_LEGACY))
|
||||
{
|
||||
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.f b/gcc/testsuite/gfortran.dg/dec_ichar_with_string.f
|
||||
new file mode 100644
|
||||
index 00000000000..c97746d4a4e
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_ichar_with_string.f
|
||||
@@ -0,0 +1,18 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test ICHAR and IACHAR with more than one character as argument
|
||||
+!
|
||||
+ 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
|
81
SOURCES/0008-Allow-non-integer-substring-indexes.patch
Normal file
81
SOURCES/0008-Allow-non-integer-substring-indexes.patch
Normal file
@ -0,0 +1,81 @@
|
||||
From a6e02ad7b8b66823629a9703af4662b8b4037e2b Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Mon, 5 Oct 2015 14:05:03 +0100
|
||||
Subject: [PATCH 08/23] Allow non-integer substring indexes
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
commit 9f05bda69f21d7a7c17b58ff0b6392bfd1a06bae
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Mon Oct 5 14:05:03 2015 +0100
|
||||
|
||||
Allow non-integer substring indexes
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index 84a4827a1b7..667cc5073e3 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -4680,6 +4680,17 @@ resolve_substring (gfc_ref *ref)
|
||||
if (!gfc_resolve_expr (ref->u.ss.start))
|
||||
return false;
|
||||
|
||||
+ /* In legacy mode, allow non-integer string indexes by converting */
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && 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",
|
||||
@@ -4709,6 +4720,17 @@ resolve_substring (gfc_ref *ref)
|
||||
if (!gfc_resolve_expr (ref->u.ss.end))
|
||||
return false;
|
||||
|
||||
+ /* Non-integer string index endings, as for start */
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && 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.f b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes.f
|
||||
new file mode 100644
|
||||
index 00000000000..8f5c8eb3c0e
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_not_integer_substring_indexes.f
|
||||
@@ -0,0 +1,17 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test not integer substring indexes
|
||||
+!
|
||||
+ PROGRAM not_integer_substring_indexes
|
||||
+ CHARACTER*5 st/'Tests'/
|
||||
+ CHARACTER*4 st2
|
||||
+ REAL ir/1.0/
|
||||
+ REAL ir2/4.0/
|
||||
+
|
||||
+ st2 = st(ir:4)
|
||||
+ st2 = st(1:ir2)
|
||||
+ st2 = st(1.0:4)
|
||||
+ st2 = st(1:4.0)
|
||||
+ st2 = st(1.5:4)
|
||||
+ END
|
@ -0,0 +1,111 @@
|
||||
From 00f13a60974cb4145799593398cc61894326c222 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 7 Oct 2015 16:31:18 -0400
|
||||
Subject: [PATCH 09/23] 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 `-std=extra-legacy` compiler flag.
|
||||
|
||||
commit f40dbd54915de8155aad94bfa19c22f11b8a8eae
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed Oct 7 16:31:18 2015 -0400
|
||||
|
||||
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 `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index 667cc5073e3..33b441aa1bc 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -3623,6 +3623,22 @@ is_character_based (bt type)
|
||||
return type == BT_CHARACTER || type == BT_HOLLERITH;
|
||||
}
|
||||
|
||||
+/* 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);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/* If E is a logical, convert it to an integer and issue a warning
|
||||
for the conversion. */
|
||||
|
||||
@@ -3733,6 +3749,12 @@ resolve_operator (gfc_expr *e)
|
||||
case INTRINSIC_OR:
|
||||
case INTRINSIC_EQV:
|
||||
case INTRINSIC_NEQV:
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ 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;
|
||||
@@ -3774,6 +3796,11 @@ resolve_operator (gfc_expr *e)
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ convert_integer_to_logical (op1);
|
||||
+ }
|
||||
+
|
||||
if (op1->ts.type == BT_LOGICAL)
|
||||
{
|
||||
e->ts.type = BT_LOGICAL;
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_logical_to_integer_and_vice_versa.f b/gcc/testsuite/gfortran.dg/dec_logical_to_integer_and_vice_versa.f
|
||||
new file mode 100644
|
||||
index 00000000000..7b9ec0d0cd2
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_logical_to_integer_and_vice_versa.f
|
||||
@@ -0,0 +1,27 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test convertion between logical and integer for logical operators
|
||||
+!
|
||||
+ 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
|
@ -0,0 +1,158 @@
|
||||
From e4c3d25a9133224535b3142ed31e8a8be1ad356b Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 7 Oct 2015 17:04:06 -0400
|
||||
Subject: [PATCH 10/23] Allow mixed string length and array specification in
|
||||
character declarations.
|
||||
|
||||
---
|
||||
|
||||
0010-Allow-mixed-string-length-and-array-specification-in.patch
|
||||
|
||||
commit 05124ea7df2ee14620d5c24ffe972db3dcab4f4e
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed Oct 7 17:04:06 2015 -0400
|
||||
|
||||
Allow mixed string length and array specification in character declarations.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
|
||||
index 6d3d28af127..c90f9de5a78 100644
|
||||
--- a/gcc/fortran/decl.c
|
||||
+++ b/gcc/fortran/decl.c
|
||||
@@ -2264,6 +2264,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
|
||||
@@ -2274,7 +2303,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;
|
||||
@@ -2283,6 +2312,7 @@ variable_decl (int elem)
|
||||
match m;
|
||||
bool t;
|
||||
gfc_symbol *sym;
|
||||
+ match cl_match;
|
||||
|
||||
initializer = NULL;
|
||||
as = NULL;
|
||||
@@ -2335,6 +2365,20 @@ 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 ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && current_ts.type == BT_CHARACTER)
|
||||
+ {
|
||||
+ cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
|
||||
+ if (cl_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)
|
||||
@@ -2453,40 +2497,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
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration.f
|
||||
new file mode 100644
|
||||
index 00000000000..69b110edb25
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration.f
|
||||
@@ -0,0 +1,10 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test character declaration with mixed string length and array specification
|
||||
+!
|
||||
+ 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
|
@ -0,0 +1,52 @@
|
||||
From ced1b6638459f33dc9f22a0cd959f97c05a62e22 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 7 Oct 2015 18:23:31 -0400
|
||||
Subject: [PATCH 11/23] Allow character-to-int conversions in DATA statements
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
0011-Allow-character-to-int-conversions-in-DATA-statement.patch
|
||||
|
||||
commit 11b148af8967669bcebd91ea6fdae28e9ec8e97c
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed Oct 7 18:23:31 2015 -0400
|
||||
|
||||
Allow character-to-int conversions in DATA statements
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
|
||||
index f347c753702..9982b8d0e85 100644
|
||||
--- a/gcc/fortran/expr.c
|
||||
+++ b/gcc/fortran/expr.c
|
||||
@@ -3294,6 +3294,10 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform,
|
||||
|| rvalue->ts.type == BT_HOLLERITH)
|
||||
return true;
|
||||
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && gfc_numeric_ts (&lvalue->ts) && rvalue->ts.type == BT_CHARACTER)
|
||||
+ return true;
|
||||
+
|
||||
if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
|
||||
return true;
|
||||
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_char_to_int_conversion_in_data.f b/gcc/testsuite/gfortran.dg/dec_char_to_int_conversion_in_data.f
|
||||
new file mode 100644
|
||||
index 00000000000..e0e4f735243
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_char_to_int_conversion_in_data.f
|
||||
@@ -0,0 +1,11 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test character to int conversion in DATA types
|
||||
+!
|
||||
+ PROGRAM char_int_data_type
|
||||
+ INTEGER*1 ai(2)
|
||||
+
|
||||
+ DATA ai/'1',1/
|
||||
+ if(ai(1).NE.49) STOP 1
|
||||
+ END
|
@ -0,0 +1,94 @@
|
||||
From 5d5a6c9d8c5a8db252d972ec32dd70d2510404fb Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu, 4 Feb 2016 16:00:30 +0000
|
||||
Subject: [PATCH 12/23] 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.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
commit a9ee9b2c45580d0e52670cec4d3d68095dabc178
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu Feb 4 16:00:30 2016 +0000
|
||||
|
||||
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.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
|
||||
index c90f9de5a78..3ad9c2c8b40 100644
|
||||
--- a/gcc/fortran/decl.c
|
||||
+++ b/gcc/fortran/decl.c
|
||||
@@ -2437,12 +2437,30 @@ 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 (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ {
|
||||
+ /* 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/testsuite/gfortran.dg/dec_derived_types_initialised_old_style.f b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style.f
|
||||
new file mode 100644
|
||||
index 00000000000..eac7de987e8
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_derived_types_initialised_old_style.f
|
||||
@@ -0,0 +1,22 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test old style initializers in derived types
|
||||
+!
|
||||
+ 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
|
129
SOURCES/0013-Allow-per-variable-kind-specification.patch
Normal file
129
SOURCES/0013-Allow-per-variable-kind-specification.patch
Normal file
@ -0,0 +1,129 @@
|
||||
From 72d3915eadd1121d8b2f0be04fafc17e9232be81 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Thu, 5 Nov 2015 18:57:53 +0000
|
||||
Subject: [PATCH 13/23] Allow per-variable kind specification.
|
||||
|
||||
INTEGER*4 x*2, y*8
|
||||
|
||||
The per-variable sizes override the kind specified in the type.
|
||||
At the moment, you can follow this with an array specification, so
|
||||
INTEGER x*2(10) is OK, but not the other way round.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
0013-Allow-per-variable-kind-specification.patch
|
||||
|
||||
Allow per-variable kind specification.
|
||||
|
||||
INTEGER*4 x*2, y*8
|
||||
|
||||
The per-variable sizes override the kind specified in the type.
|
||||
At the moment, you can follow this with an array specification, so
|
||||
INTEGER x*2(10) is OK, but not the other way round.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
|
||||
index 3ad9c2c8b40..faa08d9c4bb 100644
|
||||
--- a/gcc/fortran/decl.c
|
||||
+++ b/gcc/fortran/decl.c
|
||||
@@ -1019,6 +1019,24 @@ 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;
|
||||
+
|
||||
+ m = gfc_match_char ('*');
|
||||
+ if (m != MATCH_YES)
|
||||
+ return m;
|
||||
+
|
||||
+ m = gfc_match_small_literal_int (length, NULL);
|
||||
+ 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
|
||||
@@ -2193,10 +2211,13 @@ variable_decl (int elem)
|
||||
bool t;
|
||||
gfc_symbol *sym;
|
||||
match cl_match;
|
||||
+ match kind_match;
|
||||
+ int overridden_kind;
|
||||
|
||||
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
|
||||
@@ -2213,12 +2234,20 @@ variable_decl (int elem)
|
||||
cl_match = MATCH_NO;
|
||||
|
||||
/* Check for a character length clause before an array clause */
|
||||
- if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
- && current_ts.type == BT_CHARACTER)
|
||||
+ if (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
{
|
||||
- cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
|
||||
- if (cl_match == MATCH_ERROR)
|
||||
- goto cleanup;
|
||||
+ 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. */
|
||||
@@ -2412,6 +2441,13 @@ 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 (!check_function_name (name))
|
||||
{
|
||||
m = MATCH_ERROR;
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable.f
|
||||
new file mode 100644
|
||||
index 00000000000..0341a176aca
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable.f
|
||||
@@ -0,0 +1,12 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test kind specification in variable not in type
|
||||
+!
|
||||
+ PROGRAM spec_in_var
|
||||
+ INTEGER ai*1/1/
|
||||
+ REAL ar*4/1.0/
|
||||
+
|
||||
+ if(ai.NE.1) STOP 1
|
||||
+ if(abs(ar - 1.0) > 1.0D-6) STOP 2
|
||||
+ END
|
@ -0,0 +1,143 @@
|
||||
From 99c791361468b61976d6054e1ec1c81fe43e6559 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 11 Nov 2015 15:37:00 +0000
|
||||
Subject: [PATCH 14/23] Allow non-logical expressions in IF statements
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
0014-Allow-non-logical-expressions-in-IF-statements.patch
|
||||
|
||||
Allow non-logical expressions in IF statements
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Signed-off-by: Ben Brewer <ben.brewer@codethink.co.uk>
|
||||
Signed-off-by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index 33b441aa1bc..f979915e856 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -9919,10 +9919,23 @@ 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 (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY && 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;
|
||||
+ gfc_warning (0, "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:
|
||||
@@ -11182,11 +11195,23 @@ 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 (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY && 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;
|
||||
+ gfc_warning (0, "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.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks.f
|
||||
new file mode 100644
|
||||
index 00000000000..ad23fcfc9af
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks.f
|
||||
@@ -0,0 +1,21 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Allow logical expressions in if statements and blocks
|
||||
+!
|
||||
+ 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
|
||||
commit cf72338b9468fad669b60600bcce7918a8d4591e
|
||||
Author: Jeff Law <law@redhat.com>
|
||||
Date: Tue Jun 5 15:45:41 2018 -0600
|
||||
|
||||
Additional test for
|
||||
|
||||
0014-Allow-non-logical-expressions-in-IF-statements.patch
|
||||
"Allow non-logical expressions in IF statements"
|
||||
|
||||
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..7da6aaceec7
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks-2.f
|
||||
@@ -0,0 +1,23 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+
|
||||
+ function othersub1()
|
||||
+ integer*4 othersub1
|
||||
+ othersub1 = 1
|
||||
+ end
|
||||
+ function othersub2()
|
||||
+ integer*4 othersub2
|
||||
+ othersub2 = 2
|
||||
+ end
|
||||
+ program MAIN
|
||||
+ integer*4 othersub1
|
||||
+ integer*4 othersub2
|
||||
+c the if (integer) works here
|
||||
+ if (othersub2()) then ! { dg-warning "" }
|
||||
+ write (*,*), 'othersub2 is true'
|
||||
+c but fails in the "else if"
|
||||
+ else if (othersub1()) then ! { dg-warning "" }
|
||||
+ write (*,*), 'othersub2 is false, othersub1 is true'
|
||||
+ endif
|
||||
+ end
|
||||
+
|
@ -0,0 +1,277 @@
|
||||
From 109b1eeba24e5091bf3bdb6caedf7101a9dcaa6a Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 18 Nov 2015 11:50:41 +0000
|
||||
Subject: [PATCH 16/23] Allow calls to intrinsics with smaller types than
|
||||
specified
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
---
|
||||
|
||||
0016-Allow-calls-to-intrinsics-with-smaller-types-than-sp.patch
|
||||
|
||||
diff -Nrup a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
|
||||
--- a/gcc/fortran/gfortran.h 2018-06-05 11:59:14.269337049 -0600
|
||||
+++ b/gcc/fortran/gfortran.h 2018-06-05 11:59:52.830081690 -0600
|
||||
@@ -656,6 +656,13 @@ enum gfc_param_spec_type
|
||||
SPEC_DEFERRED
|
||||
};
|
||||
|
||||
+enum match_type
|
||||
+{
|
||||
+ MATCH_EXACT,
|
||||
+ MATCH_PROMOTABLE,
|
||||
+ MATCH_INVALID
|
||||
+};
|
||||
+
|
||||
/************************* Structures *****************************/
|
||||
|
||||
/* Used for keeping things in balanced binary trees. */
|
||||
@@ -3251,7 +3253,7 @@ bool gfc_add_interface (gfc_symbol *);
|
||||
gfc_interface *gfc_current_interface_head (void);
|
||||
void gfc_set_current_interface_head (gfc_interface *);
|
||||
gfc_symtree* gfc_find_sym_in_symtree (gfc_symbol*);
|
||||
-bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*);
|
||||
+bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*, enum match_type mtype);
|
||||
bool gfc_check_operator_interface (gfc_symbol*, gfc_intrinsic_op, locus);
|
||||
bool gfc_has_vector_subscript (gfc_expr*);
|
||||
gfc_intrinsic_op gfc_equivalent_op (gfc_intrinsic_op);
|
||||
diff -Nrup a/gcc/fortran/interface.c b/gcc/fortran/interface.c
|
||||
--- a/gcc/fortran/interface.c 2018-03-03 06:51:39.000000000 -0700
|
||||
+++ b/gcc/fortran/interface.c 2018-06-05 12:01:11.218559539 -0600
|
||||
@@ -682,7 +682,7 @@ gfc_compare_derived_types (gfc_symbol *d
|
||||
/* Compare two typespecs, recursively if necessary. */
|
||||
|
||||
bool
|
||||
-gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
|
||||
+gfc_compare_types_generic (gfc_typespec *ts1, gfc_typespec *ts2, enum match_type mtype)
|
||||
{
|
||||
/* See if one of the typespecs is a BT_VOID, which is what is being used
|
||||
to allow the funcs like c_f_pointer to accept any pointer type.
|
||||
@@ -721,12 +721,23 @@ gfc_compare_types (gfc_typespec *ts1, gf
|
||||
return compare_union_types (ts1->u.derived, ts2->u.derived);
|
||||
|
||||
if (ts1->type != BT_DERIVED && ts1->type != BT_CLASS)
|
||||
- return (ts1->kind == ts2->kind);
|
||||
+ {
|
||||
+ if (mtype == MATCH_PROMOTABLE)
|
||||
+ return (ts1->kind >= ts2->kind);
|
||||
+ else
|
||||
+ return (ts1->kind == ts2->kind);
|
||||
+ }
|
||||
+
|
||||
|
||||
/* Compare derived types. */
|
||||
return gfc_type_compatible (ts1, ts2);
|
||||
}
|
||||
|
||||
+bool
|
||||
+gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2)
|
||||
+{
|
||||
+ return gfc_compare_types_generic (ts1, ts2, MATCH_EXACT);
|
||||
+}
|
||||
|
||||
static bool
|
||||
compare_type (gfc_symbol *s1, gfc_symbol *s2)
|
||||
@@ -743,7 +754,9 @@ compare_type (gfc_symbol *s1, gfc_symbol
|
||||
return compare_type (s1, s2);
|
||||
}
|
||||
|
||||
-
|
||||
+/* Given two symbols that are formal arguments, compare their ranks
|
||||
+ and types. Returns nonzero if they have the same rank and type,
|
||||
+ zero otherwise. */
|
||||
static bool
|
||||
compare_rank (gfc_symbol *s1, gfc_symbol *s2)
|
||||
{
|
||||
@@ -2150,7 +2163,7 @@ argument_rank_mismatch (const char *name
|
||||
|
||||
static bool
|
||||
compare_parameter (gfc_symbol *formal, gfc_expr *actual,
|
||||
- int ranks_must_agree, int is_elemental, locus *where)
|
||||
+ int ranks_must_agree, int is_elemental, locus *where, enum match_type mtype)
|
||||
{
|
||||
gfc_ref *ref;
|
||||
bool rank_check, is_pointer;
|
||||
@@ -2242,7 +2255,7 @@ compare_parameter (gfc_symbol *formal, g
|
||||
&& actual->ts.type != BT_HOLLERITH
|
||||
&& formal->ts.type != BT_ASSUMED
|
||||
&& !(formal->attr.ext_attr & (1 << EXT_ATTR_NO_ARG_CHECK))
|
||||
- && !gfc_compare_types (&formal->ts, &actual->ts)
|
||||
+ && !gfc_compare_types_generic (&formal->ts, &actual->ts, mtype)
|
||||
&& !(formal->ts.type == BT_DERIVED && actual->ts.type == BT_CLASS
|
||||
&& gfc_compare_derived_types (formal->ts.u.derived,
|
||||
CLASS_DATA (actual)->ts.u.derived)))
|
||||
@@ -2792,7 +2805,8 @@ is_procptr_result (gfc_expr *expr)
|
||||
static bool
|
||||
compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
|
||||
int ranks_must_agree, int is_elemental,
|
||||
- bool in_statement_function, locus *where)
|
||||
+ bool in_statement_function, locus *where,
|
||||
+ enum match_type mtype)
|
||||
{
|
||||
gfc_actual_arglist **new_arg, *a, *actual;
|
||||
gfc_formal_arglist *f;
|
||||
@@ -2918,7 +2932,7 @@ compare_actual_formal (gfc_actual_arglis
|
||||
}
|
||||
|
||||
if (!compare_parameter (f->sym, a->expr, ranks_must_agree,
|
||||
- is_elemental, where))
|
||||
+ is_elemental, where, mtype))
|
||||
return false;
|
||||
|
||||
/* TS 29113, 6.3p2. */
|
||||
@@ -3666,7 +3680,7 @@ gfc_procedure_use (gfc_symbol *sym, gfc_
|
||||
/* For a statement function, check that types and type parameters of actual
|
||||
arguments and dummy arguments match. */
|
||||
if (!compare_actual_formal (ap, dummy_args, 0, sym->attr.elemental,
|
||||
- sym->attr.proc == PROC_ST_FUNCTION, where))
|
||||
+ sym->attr.proc == PROC_ST_FUNCTION, where, MATCH_PROMOTABLE))
|
||||
return false;
|
||||
|
||||
if (!check_intents (dummy_args, *ap))
|
||||
@@ -3715,7 +3730,7 @@ gfc_ppc_use (gfc_component *comp, gfc_ac
|
||||
}
|
||||
|
||||
if (!compare_actual_formal (ap, comp->ts.interface->formal, 0,
|
||||
- comp->attr.elemental, false, where))
|
||||
+ comp->attr.elemental, false, where, MATCH_EXACT))
|
||||
return;
|
||||
|
||||
check_intents (comp->ts.interface->formal, *ap);
|
||||
@@ -3729,7 +3744,7 @@ gfc_ppc_use (gfc_component *comp, gfc_ac
|
||||
GENERIC resolution. */
|
||||
|
||||
bool
|
||||
-gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym)
|
||||
+gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym, enum match_type mtype)
|
||||
{
|
||||
gfc_formal_arglist *dummy_args;
|
||||
bool r;
|
||||
@@ -3740,7 +3755,7 @@ gfc_arglist_matches_symbol (gfc_actual_a
|
||||
dummy_args = gfc_sym_get_dummy_args (sym);
|
||||
|
||||
r = !sym->attr.elemental;
|
||||
- if (compare_actual_formal (args, dummy_args, r, !r, false, NULL))
|
||||
+ if (compare_actual_formal (args, dummy_args, r, !r, false, NULL, mtype))
|
||||
{
|
||||
check_intents (dummy_args, *args);
|
||||
if (warn_aliasing)
|
||||
@@ -3766,7 +3781,8 @@ gfc_search_interface (gfc_interface *int
|
||||
locus null_expr_loc;
|
||||
gfc_actual_arglist *a;
|
||||
bool has_null_arg = false;
|
||||
-
|
||||
+ enum match_type mtypes[] = { MATCH_EXACT, MATCH_PROMOTABLE };
|
||||
+ int i;
|
||||
for (a = *ap; a; a = a->next)
|
||||
if (a->expr && a->expr->expr_type == EXPR_NULL
|
||||
&& a->expr->ts.type == BT_UNKNOWN)
|
||||
@@ -3776,38 +3792,43 @@ gfc_search_interface (gfc_interface *int
|
||||
break;
|
||||
}
|
||||
|
||||
- for (; intr; intr = intr->next)
|
||||
+ for (i=0; i<2; i++)
|
||||
{
|
||||
+ for (; intr; intr = intr->next)
|
||||
+ {
|
||||
+ if (intr->sym->attr.flavor == FL_DERIVED)
|
||||
+ continue;
|
||||
if (gfc_fl_struct (intr->sym->attr.flavor))
|
||||
continue;
|
||||
- if (sub_flag && intr->sym->attr.function)
|
||||
- continue;
|
||||
- if (!sub_flag && intr->sym->attr.subroutine)
|
||||
+ if (sub_flag && intr->sym->attr.function)
|
||||
+ continue;
|
||||
+ if (!sub_flag && intr->sym->attr.subroutine)
|
||||
continue;
|
||||
|
||||
- if (gfc_arglist_matches_symbol (ap, intr->sym))
|
||||
- {
|
||||
- if (has_null_arg && null_sym)
|
||||
- {
|
||||
- gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
|
||||
- "between specific functions %s and %s",
|
||||
- &null_expr_loc, null_sym->name, intr->sym->name);
|
||||
- return NULL;
|
||||
- }
|
||||
- else if (has_null_arg)
|
||||
+ if (gfc_arglist_matches_symbol (ap, intr->sym, mtypes[i]))
|
||||
{
|
||||
- null_sym = intr->sym;
|
||||
- continue;
|
||||
- }
|
||||
+ if (has_null_arg && null_sym)
|
||||
+ {
|
||||
+ gfc_error ("MOLD= required in NULL() argument at %L: Ambiguity "
|
||||
+ "between specific functions %s and %s",
|
||||
+ &null_expr_loc, null_sym->name, intr->sym->name);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ else if (has_null_arg)
|
||||
+ {
|
||||
+ null_sym = intr->sym;
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
- /* Satisfy 12.4.4.1 such that an elemental match has lower
|
||||
- weight than a non-elemental match. */
|
||||
- if (intr->sym->attr.elemental)
|
||||
- {
|
||||
- elem_sym = intr->sym;
|
||||
- continue;
|
||||
+ /* Satisfy 12.4.4.1 such that an elemental match has lower
|
||||
+ weight than a non-elemental match. */
|
||||
+ if (intr->sym->attr.elemental)
|
||||
+ {
|
||||
+ elem_sym = intr->sym;
|
||||
+ continue;
|
||||
+ }
|
||||
+ return intr->sym;
|
||||
}
|
||||
- return intr->sym;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3942,7 +3963,7 @@ matching_typebound_op (gfc_expr** tb_bas
|
||||
|
||||
/* Check if this arglist matches the formal. */
|
||||
argcopy = gfc_copy_actual_arglist (args);
|
||||
- matches = gfc_arglist_matches_symbol (&argcopy, target);
|
||||
+ matches = gfc_arglist_matches_symbol (&argcopy, target, MATCH_EXACT);
|
||||
gfc_free_actual_arglist (argcopy);
|
||||
|
||||
/* Return if we found a match. */
|
||||
diff -Nrup a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
|
||||
--- a/gcc/fortran/intrinsic.c 2018-06-05 11:59:14.278336990 -0600
|
||||
+++ b/gcc/fortran/intrinsic.c 2018-06-05 11:59:52.831081683 -0600
|
||||
@@ -4229,6 +4229,16 @@ check_arglist (gfc_actual_arglist **ap,
|
||||
if (ts.kind == 0)
|
||||
ts.kind = actual->expr->ts.kind;
|
||||
|
||||
+ /* ts.kind is the argument spec. actual is what was passed. */
|
||||
+
|
||||
+ if (actual->expr->ts.kind < ts.kind
|
||||
+ && ts.type == BT_INTEGER)
|
||||
+ {
|
||||
+ /* If it was OK to overwrite ts.kind in the previous case, it
|
||||
+ should be fine here... */
|
||||
+ ts.kind = actual->expr->ts.kind;
|
||||
+ }
|
||||
+
|
||||
if (!gfc_compare_types (&ts, &actual->expr->ts))
|
||||
{
|
||||
if (error_flag)
|
||||
diff -Nrup a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
--- a/gcc/fortran/resolve.c 2018-06-05 11:59:14.291336904 -0600
|
||||
+++ b/gcc/fortran/resolve.c 2018-06-05 11:59:52.833081670 -0600
|
||||
@@ -6055,7 +6055,7 @@ resolve_typebound_generic_call (gfc_expr
|
||||
&& gfc_sym_get_dummy_args (target) == NULL);
|
||||
|
||||
/* Check if this arglist matches the formal. */
|
||||
- matches = gfc_arglist_matches_symbol (&args, target);
|
||||
+ matches = gfc_arglist_matches_symbol (&args, target, MATCH_EXACT);
|
||||
|
||||
/* Clean up and break out of the loop if we've found it. */
|
||||
gfc_free_actual_arglist (args);
|
@ -0,0 +1,68 @@
|
||||
From fdda38024c7151ca632cb338085af80ceb63ec4d Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed, 18 Nov 2015 15:08:56 +0000
|
||||
Subject: [PATCH 17/23] Add the SEQUENCE attribute by default if it's not
|
||||
present.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
|
||||
0017-Add-the-SEQUENCE-attribute-by-default-if-it-s-not-pr.patch
|
||||
|
||||
commit 1635277d719de05fbd37a2887273ce893bf43198
|
||||
Author: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Wed Nov 18 15:08:56 2015 +0000
|
||||
|
||||
Add the SEQUENCE attribute by default if it's not present.
|
||||
|
||||
This feature is enabled by the `-std=extra-legacy` compiler flag.
|
||||
|
||||
Test written by: Francisco Redondo Marchena <francisco.marchena@codethink.co.uk>
|
||||
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index 2e60984b3bd..022b9230ec9 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -963,9 +963,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 (gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ /* 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.f b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default.f
|
||||
new file mode 100644
|
||||
index 00000000000..c0851c8bc77
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_add_SEQUENCE_to_COMMON_block_by_default.f
|
||||
@@ -0,0 +1,17 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }
|
||||
+!
|
||||
+! Test add default SEQUENCE attribute to COMMON blocks
|
||||
+!
|
||||
+ PROGRAM sequence_att_common
|
||||
+ TYPE STRUCT1
|
||||
+ INTEGER*4 ID
|
||||
+ INTEGER*4 TYPE
|
||||
+ INTEGER*8 DEFVAL
|
||||
+ CHARACTER*(4) NAME
|
||||
+ LOGICAL*1 NIL
|
||||
+ END TYPE STRUCT1
|
||||
+
|
||||
+ TYPE (STRUCT1) SINST
|
||||
+ COMMON /BLOCK1/ SINST
|
||||
+ END
|
@ -0,0 +1,62 @@
|
||||
From b8527b8f03c4c50869c4f9a063f5c7686e58e5e9 Mon Sep 17 00:00:00 2001
|
||||
From: Jim MacArthur <jim.macarthur@codethink.co.uk>
|
||||
Date: Fri, 26 Aug 2016 17:46:05 +0100
|
||||
Subject: [PATCH 18/23] Fill in missing array dimensions using the lower bound
|
||||
|
||||
This feature is enabled by the `-fstd=extra-legacy` compiler flag
|
||||
---
|
||||
|
||||
|
||||
0018-Fill-in-missing-array-dimensions-using-the-lower-bou.patch
|
||||
|
||||
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
|
||||
index a831f70..ac35357 100644
|
||||
--- a/gcc/fortran/resolve.c
|
||||
+++ b/gcc/fortran/resolve.c
|
||||
@@ -4396,6 +4396,27 @@ compare_spec_to_ref (gfc_array_ref *ar)
|
||||
if (ar->type == AR_FULL)
|
||||
return true;
|
||||
|
||||
+ if ((gfc_option.allow_std & GFC_STD_EXTRA_LEGACY)
|
||||
+ && as->rank > ar->dimen)
|
||||
+ {
|
||||
+ /* Add in the missing dimensions, assuming they are the lower bound
|
||||
+ of that dimension if not specified. */
|
||||
+ int j;
|
||||
+ gfc_warning (0, "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 0000000..20752a1
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/array_6.f90
|
||||
@@ -0,0 +1,13 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=extra-legacy" }!
|
||||
+! 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>
|
||||
+!
|
||||
+
|
||||
+program under_specified_array
|
||||
+ INTEGER chsbrd(8,8)
|
||||
+ chsbrd(3,1) = 5
|
||||
+ print *, chsbrd(3) ! { dg-warning "Using the lower bound for unspecified dimensions in array reference" }
|
||||
+end program
|
35
SOURCES/0019-Add-tests-for-AUTOMATIC-keyword.patch
Normal file
35
SOURCES/0019-Add-tests-for-AUTOMATIC-keyword.patch
Normal file
@ -0,0 +1,35 @@
|
||||
From 52e49e5edaf2c4de5974b42dd359c0f57546c640 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Doffman <mark.doffman@codethink.co.uk>
|
||||
Date: Thu, 5 Jun 2014 20:47:51 +0000
|
||||
Subject: [PATCH 19/23] Add tests for AUTOMATIC keyword
|
||||
|
||||
These tests were written by Mark Doffman for his own implementation of
|
||||
the AUTOMATIC keyword. Since then, Fritz Reese's implementation was
|
||||
merged upstream so we no longer carry Mark's patches but the tests
|
||||
may add some useful extra test coverage. Or they might not.
|
||||
---
|
||||
gcc/testsuite/gfortran.dg/automatic_1.f90 | 31 ++++++++++++++++++++++++++
|
||||
gcc/testsuite/gfortran.dg/automatic_common.f90 | 6 +++++
|
||||
gcc/testsuite/gfortran.dg/automatic_repeat.f90 | 8 +++++++
|
||||
gcc/testsuite/gfortran.dg/automatic_save.f90 | 8 +++++++
|
||||
4 files changed, 53 insertions(+)
|
||||
create mode 100644 gcc/testsuite/gfortran.dg/automatic_1.f90
|
||||
create mode 100644 gcc/testsuite/gfortran.dg/automatic_common.f90
|
||||
create mode 100644 gcc/testsuite/gfortran.dg/automatic_repeat.f90
|
||||
create mode 100644 gcc/testsuite/gfortran.dg/automatic_save.f90
|
||||
|
||||
diff --git a/gcc/testsuite/gfortran.dg/automatic_common.f90 b/gcc/testsuite/gfortran.dg/automatic_common.f90
|
||||
new file mode 100644
|
||||
index 0000000..5ec016f
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/automatic_common.f90
|
||||
@@ -0,0 +1,6 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec-static" }
|
||||
+! A common variable may not have the AUTOMATIC attribute.
|
||||
+INTEGER, AUTOMATIC :: X
|
||||
+COMMON /COM/ X ! { dg-error "conflicts with AUTOMATIC attribute" }
|
||||
+END
|
||||
--
|
||||
2.9.5
|
||||
|
@ -0,0 +1,516 @@
|
||||
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
|
||||
index d93dcfa..f47565c 100644
|
||||
--- a/gcc/fortran/io.c
|
||||
+++ b/gcc/fortran/io.c
|
||||
@@ -909,6 +909,13 @@ data_desc:
|
||||
|
||||
if (u != FMT_POSINT)
|
||||
{
|
||||
+ if (flag_dec)
|
||||
+ {
|
||||
+ /* Assume a default width based on the variable size. */
|
||||
+ saved_token = u;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
format_locus.nextc += format_string_pos;
|
||||
gfc_error ("Positive width required in format "
|
||||
"specifier %s at %L", token_to_string (t),
|
||||
@@ -1030,6 +1037,13 @@ data_desc:
|
||||
goto fail;
|
||||
if (t != FMT_ZERO && t != FMT_POSINT)
|
||||
{
|
||||
+ if (flag_dec)
|
||||
+ {
|
||||
+ /* Assume the default width is expected here and continue lexing. */
|
||||
+ value = 0; /* It doesn't matter what we set the value to here. */
|
||||
+ saved_token = t;
|
||||
+ break;
|
||||
+ }
|
||||
error = nonneg_required;
|
||||
goto syntax;
|
||||
}
|
||||
@@ -1099,8 +1113,17 @@ data_desc:
|
||||
goto fail;
|
||||
if (t != FMT_ZERO && t != FMT_POSINT)
|
||||
{
|
||||
- error = nonneg_required;
|
||||
- goto syntax;
|
||||
+ if (flag_dec)
|
||||
+ {
|
||||
+ /* Assume the default width is expected here and continue lexing. */
|
||||
+ value = 0; /* It doesn't matter what we set the value to here. */
|
||||
+ saved_token = t;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ error = nonneg_required;
|
||||
+ goto syntax;
|
||||
+ }
|
||||
}
|
||||
else if (is_input && t == FMT_ZERO)
|
||||
{
|
||||
diff --git a/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90
|
||||
new file mode 100644
|
||||
index 0000000..b087b8f
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/fmt_f_default_field_width.f90
|
||||
@@ -0,0 +1,43 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options -fdec }
|
||||
+!
|
||||
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
|
||||
+!
|
||||
+! This feature is not part of any Fortran standard, but it is supported by the
|
||||
+! Oracle Fortran compiler and others.
|
||||
+!
|
||||
+! libgfortran uses printf() internally to implement FORMAT. If you print float
|
||||
+! values to a higher precision than the type can actually store, the results
|
||||
+! are implementation dependent: some platforms print zeros, others print random
|
||||
+! numbers. Don't depend on this behaviour in tests because they will not be
|
||||
+! portable.
|
||||
+
|
||||
+ character(50) :: buffer
|
||||
+
|
||||
+ real*4 :: real_4
|
||||
+ real*8 :: real_8
|
||||
+ real*16 :: real_16
|
||||
+ integer :: len
|
||||
+
|
||||
+ real_4 = 4.18
|
||||
+ write(buffer, '(A, F, A)') ':',real_4,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 4.1799998:") call abort
|
||||
+
|
||||
+ real_4 = 0.00000018
|
||||
+ write(buffer, '(A, F, A)') ':',real_4,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 0.0000002:") call abort
|
||||
+
|
||||
+ real_8 = 4.18
|
||||
+ write(buffer, '(A, F, A)') ':',real_8,':'
|
||||
+ print *,buffer
|
||||
+ len = len_trim(buffer)
|
||||
+ if (len /= 27) call abort
|
||||
+
|
||||
+ real_16 = 4.18
|
||||
+ write(buffer, '(A, F, A)') ':',real_16,':'
|
||||
+ print *,buffer
|
||||
+ len = len_trim(buffer)
|
||||
+ if (len /= 44) call abort
|
||||
+end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90
|
||||
new file mode 100644
|
||||
index 0000000..3d3a476
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/fmt_g_default_field_width.f90
|
||||
@@ -0,0 +1,48 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options -fdec }
|
||||
+!
|
||||
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
|
||||
+!
|
||||
+! This feature is not part of any Fortran standard, but it is supported by the
|
||||
+! Oracle Fortran compiler and others.
|
||||
+!
|
||||
+! libgfortran uses printf() internally to implement FORMAT. If you print float
|
||||
+! values to a higher precision than the type can actually store, the results
|
||||
+! are implementation dependent: some platforms print zeros, others print random
|
||||
+! numbers. Don't depend on this behaviour in tests because they will not be
|
||||
+! portable.
|
||||
+
|
||||
+ character(50) :: buffer
|
||||
+
|
||||
+ real*4 :: real_4
|
||||
+ real*8 :: real_8
|
||||
+ real*16 :: real_16
|
||||
+ integer :: len
|
||||
+
|
||||
+ real_4 = 4.18
|
||||
+ write(buffer, '(A, G, A)') ':',real_4,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 4.180000 :") call abort
|
||||
+
|
||||
+ real_4 = 0.00000018
|
||||
+ write(buffer, '(A, G, A)') ':',real_4,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 0.1800000E-06:") call abort
|
||||
+
|
||||
+ real_4 = 18000000.4
|
||||
+ write(buffer, '(A, G, A)') ':',real_4,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 0.1800000E+08:") call abort
|
||||
+
|
||||
+ real_8 = 4.18
|
||||
+ write(buffer, '(A, G, A)') ':',real_8,':'
|
||||
+ print *,buffer
|
||||
+ len = len_trim(buffer)
|
||||
+ if (len /= 27) call abort
|
||||
+
|
||||
+ real_16 = 4.18
|
||||
+ write(buffer, '(A, G, A)') ':',real_16,':'
|
||||
+ print *,buffer
|
||||
+ len = len_trim(buffer)
|
||||
+ if (len /= 44) call abort
|
||||
+end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90 b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90
|
||||
new file mode 100644
|
||||
index 0000000..ac4e165
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/fmt_i_default_field_width.f90
|
||||
@@ -0,0 +1,38 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options -fdec }
|
||||
+!
|
||||
+! Test case for the default field widths enabled by the -fdec-format-defaults flag.
|
||||
+!
|
||||
+! This feature is not part of any Fortran standard, but it is supported by the
|
||||
+! Oracle Fortran compiler and others.
|
||||
+
|
||||
+ character(50) :: buffer
|
||||
+ character(1) :: colon
|
||||
+
|
||||
+ integer*2 :: integer_2
|
||||
+ integer*4 :: integer_4
|
||||
+ integer*8 :: integer_8
|
||||
+
|
||||
+ write(buffer, '(A, I, A)') ':',12340,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": 12340:") call abort
|
||||
+
|
||||
+ read(buffer, '(A1, I, A1)') colon, integer_4, colon
|
||||
+ if (integer_4.ne.12340) call abort
|
||||
+
|
||||
+ integer_2 = -99
|
||||
+ write(buffer, '(A, I, A)') ':',integer_2,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": -99:") call abort
|
||||
+
|
||||
+ integer_8 = -11112222
|
||||
+ write(buffer, '(A, I, A)') ':',integer_8,':'
|
||||
+ print *,buffer
|
||||
+ if (buffer.ne.": -11112222:") call abort
|
||||
+
|
||||
+! If the width is 7 and there are 7 leading zeroes, the result should be zero.
|
||||
+ integer_2 = 789
|
||||
+ buffer = '0000000789'
|
||||
+ read(buffer, '(I)') integer_2
|
||||
+ if (integer_2.ne.0) call abort
|
||||
+end
|
||||
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
|
||||
index c2abdd7..692b1ff 100644
|
||||
--- a/libgfortran/io/format.c
|
||||
+++ b/libgfortran/io/format.c
|
||||
@@ -956,12 +956,33 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
|
||||
*seen_dd = true;
|
||||
if (u != FMT_POSINT && u != FMT_ZERO)
|
||||
{
|
||||
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
|
||||
+ {
|
||||
+ tail->u.real.w = DEFAULT_WIDTH;
|
||||
+ tail->u.real.d = 0;
|
||||
+ tail->u.real.e = -1;
|
||||
+ fmt->saved_token = u;
|
||||
+ break;
|
||||
+ }
|
||||
fmt->error = nonneg_required;
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
+ else if (u == FMT_ZERO)
|
||||
+ {
|
||||
+ fmt->error = posint_required;
|
||||
+ goto finished;
|
||||
+ }
|
||||
else if (u != FMT_POSINT)
|
||||
{
|
||||
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
|
||||
+ {
|
||||
+ tail->u.real.w = DEFAULT_WIDTH;
|
||||
+ tail->u.real.d = 0;
|
||||
+ tail->u.real.e = -1;
|
||||
+ fmt->saved_token = u;
|
||||
+ break;
|
||||
+ }
|
||||
fmt->error = posint_required;
|
||||
goto finished;
|
||||
}
|
||||
@@ -1099,6 +1120,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
|
||||
{
|
||||
if (t != FMT_POSINT)
|
||||
{
|
||||
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
|
||||
+ {
|
||||
+ tail->u.integer.w = DEFAULT_WIDTH;
|
||||
+ tail->u.integer.m = -1;
|
||||
+ fmt->saved_token = t;
|
||||
+ break;
|
||||
+ }
|
||||
fmt->error = posint_required;
|
||||
goto finished;
|
||||
}
|
||||
@@ -1107,6 +1135,13 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
|
||||
{
|
||||
if (t != FMT_ZERO && t != FMT_POSINT)
|
||||
{
|
||||
+ if (dtp->common.flags & IOPARM_DT_DEC_EXT)
|
||||
+ {
|
||||
+ tail->u.integer.w = DEFAULT_WIDTH;
|
||||
+ tail->u.integer.m = -1;
|
||||
+ fmt->saved_token = t;
|
||||
+ break;
|
||||
+ }
|
||||
fmt->error = nonneg_required;
|
||||
goto finished;
|
||||
}
|
||||
diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h
|
||||
index 5583183..d1d08e8 100644
|
||||
--- a/libgfortran/io/io.h
|
||||
+++ b/libgfortran/io/io.h
|
||||
@@ -981,5 +981,55 @@ memset4 (gfc_char4_t *p, gfc_char4_t c, int k)
|
||||
*p++ = c;
|
||||
}
|
||||
|
||||
+/* Used in width fields to indicate that the default should be used */
|
||||
+#define DEFAULT_WIDTH -1
|
||||
+
|
||||
+/* Defaults for certain format field descriptors. These are decided based on
|
||||
+ * the type of the value being formatted.
|
||||
+ *
|
||||
+ * The behaviour here is modelled on the Oracle Fortran compiler. At the time
|
||||
+ * of writing, the details were available at this URL:
|
||||
+ *
|
||||
+ * https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnc3/index.html#z4000743746d
|
||||
+ */
|
||||
+
|
||||
+static inline int
|
||||
+default_width_for_integer (int kind)
|
||||
+{
|
||||
+ switch (kind)
|
||||
+ {
|
||||
+ case 1:
|
||||
+ case 2: return 7;
|
||||
+ case 4: return 12;
|
||||
+ case 8: return 23;
|
||||
+ case 16: return 44;
|
||||
+ default: return 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+default_width_for_float (int kind)
|
||||
+{
|
||||
+ switch (kind)
|
||||
+ {
|
||||
+ case 4: return 15;
|
||||
+ case 8: return 25;
|
||||
+ case 16: return 42;
|
||||
+ default: return 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+default_precision_for_float (int kind)
|
||||
+{
|
||||
+ switch (kind)
|
||||
+ {
|
||||
+ case 4: return 7;
|
||||
+ case 8: return 16;
|
||||
+ case 16: return 33;
|
||||
+ default: return 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
|
||||
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
|
||||
index 2c9de48..e911e35 100644
|
||||
--- a/libgfortran/io/read.c
|
||||
+++ b/libgfortran/io/read.c
|
||||
@@ -629,6 +629,12 @@ read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length)
|
||||
|
||||
w = f->u.w;
|
||||
|
||||
+ /* This is a legacy extension, and the frontend will only allow such cases
|
||||
+ * through when -fdec-format-defaults is passed.
|
||||
+ */
|
||||
+ if (w == DEFAULT_WIDTH)
|
||||
+ w = default_width_for_integer (length);
|
||||
+
|
||||
p = read_block_form (dtp, &w);
|
||||
|
||||
if (p == NULL)
|
||||
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
|
||||
index a7307a8..c8e52fb 100644
|
||||
--- a/libgfortran/io/write.c
|
||||
+++ b/libgfortran/io/write.c
|
||||
@@ -684,9 +684,8 @@ write_l (st_parameter_dt *dtp, const fnode *f, char *source, int len)
|
||||
p[wlen - 1] = (n) ? 'T' : 'F';
|
||||
}
|
||||
|
||||
-
|
||||
static void
|
||||
-write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n)
|
||||
+write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n, int len)
|
||||
{
|
||||
int w, m, digits, nzero, nblank;
|
||||
char *p;
|
||||
@@ -719,6 +718,9 @@ write_boz (st_parameter_dt *dtp, const fnode *f, const char *q, int n)
|
||||
/* Select a width if none was specified. The idea here is to always
|
||||
print something. */
|
||||
|
||||
+ if (w == DEFAULT_WIDTH)
|
||||
+ w = default_width_for_integer (len);
|
||||
+
|
||||
if (w == 0)
|
||||
w = ((digits < m) ? m : digits);
|
||||
|
||||
@@ -845,6 +847,8 @@ write_decimal (st_parameter_dt *dtp, const fnode *f, const char *source,
|
||||
|
||||
/* Select a width if none was specified. The idea here is to always
|
||||
print something. */
|
||||
+ if (w == DEFAULT_WIDTH)
|
||||
+ w = default_width_for_integer (len);
|
||||
|
||||
if (w == 0)
|
||||
w = ((digits < m) ? m : digits) + nsign;
|
||||
@@ -1187,13 +1191,13 @@ write_b (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
|
||||
if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
|
||||
{
|
||||
p = btoa_big (source, itoa_buf, len, &n);
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
n = extract_uint (source, len);
|
||||
p = btoa (n, itoa_buf, sizeof (itoa_buf));
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1208,13 +1212,13 @@ write_o (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
|
||||
if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
|
||||
{
|
||||
p = otoa_big (source, itoa_buf, len, &n);
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
n = extract_uint (source, len);
|
||||
p = otoa (n, itoa_buf, sizeof (itoa_buf));
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1228,13 +1232,13 @@ write_z (st_parameter_dt *dtp, const fnode *f, const char *source, int len)
|
||||
if (len > (int) sizeof (GFC_UINTEGER_LARGEST))
|
||||
{
|
||||
p = ztoa_big (source, itoa_buf, len, &n);
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
n = extract_uint (source, len);
|
||||
p = gfc_xtoa (n, itoa_buf, sizeof (itoa_buf));
|
||||
- write_boz (dtp, f, p, n);
|
||||
+ write_boz (dtp, f, p, n, len);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1504,7 +1508,7 @@ size_from_kind (st_parameter_dt *dtp, const fnode *f, int kind)
|
||||
{
|
||||
int size;
|
||||
|
||||
- if (f->format == FMT_F && f->u.real.w == 0)
|
||||
+ if ((f->format == FMT_F && f->u.real.w == 0) || f->u.real.w == DEFAULT_WIDTH)
|
||||
{
|
||||
switch (kind)
|
||||
{
|
||||
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
|
||||
index 7f0aa1d..73dc910 100644
|
||||
--- a/libgfortran/io/write_float.def
|
||||
+++ b/libgfortran/io/write_float.def
|
||||
@@ -113,7 +113,8 @@ determine_precision (st_parameter_dt * d
|
||||
static void
|
||||
build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer,
|
||||
size_t size, int nprinted, int precision, int sign_bit,
|
||||
- bool zero_flag, int npad, char *result, size_t *len)
|
||||
+ bool zero_flag, int npad, int default_width, char *result,
|
||||
+ size_t *len)
|
||||
{
|
||||
char *put;
|
||||
char *digits;
|
||||
@@ -132,8 +133,17 @@ build_float_string (st_parameter_dt *dtp
|
||||
sign_t sign;
|
||||
|
||||
ft = f->format;
|
||||
- w = f->u.real.w;
|
||||
- d = f->u.real.d;
|
||||
+ if (f->u.real.w == DEFAULT_WIDTH)
|
||||
+ /* This codepath can only be reached with -fdec-format-defaults. */
|
||||
+ {
|
||||
+ w = default_width;
|
||||
+ d = precision;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ w = f->u.real.w;
|
||||
+ d = f->u.real.d;
|
||||
+ }
|
||||
p = dtp->u.p.scale_factor;
|
||||
*len = 0;
|
||||
|
||||
@@ -959,6 +969,11 @@ determine_en_precision (st_parameter_dt
|
||||
int save_scale_factor;\
|
||||
volatile GFC_REAL_ ## x temp;\
|
||||
save_scale_factor = dtp->u.p.scale_factor;\
|
||||
+ if (w == DEFAULT_WIDTH)\
|
||||
+ {\
|
||||
+ w = default_width;\
|
||||
+ d = precision;\
|
||||
+ }\
|
||||
switch (dtp->u.p.current_unit->round_status)\
|
||||
{\
|
||||
case ROUND_ZERO:\
|
||||
@@ -1034,7 +1049,8 @@ determine_en_precision (st_parameter_dt
|
||||
nprinted = FDTOA(y,precision,m);\
|
||||
}\
|
||||
build_float_string (dtp, &newf, buffer, size, nprinted, precision,\
|
||||
- sign_bit, zero_flag, npad, result, res_len);\
|
||||
+ sign_bit, zero_flag, npad, default_width,\
|
||||
+ result, res_len);\
|
||||
dtp->u.p.scale_factor = save_scale_factor;\
|
||||
}\
|
||||
else\
|
||||
@@ -1044,7 +1060,8 @@ determine_en_precision (st_parameter_dt
|
||||
else\
|
||||
nprinted = DTOA(y,precision,m);\
|
||||
build_float_string (dtp, f, buffer, size, nprinted, precision,\
|
||||
- sign_bit, zero_flag, npad, result, res_len);\
|
||||
+ sign_bit, zero_flag, npad, default_width,\
|
||||
+ result, res_len);\
|
||||
}\
|
||||
}\
|
||||
|
||||
@@ -1058,6 +1075,16 @@ get_float_string (st_parameter_dt *dtp,
|
||||
{
|
||||
int sign_bit, nprinted;
|
||||
bool zero_flag;
|
||||
+ int default_width = 0;
|
||||
+
|
||||
+ if (f->u.real.w == DEFAULT_WIDTH)
|
||||
+ /* This codepath can only be reached with -fdec-format-defaults. The default
|
||||
+ * values are based on those used in the Oracle Fortran compiler.
|
||||
+ */
|
||||
+ {
|
||||
+ default_width = default_width_for_float (kind);
|
||||
+ precision = default_precision_for_float (kind);
|
||||
+ }
|
||||
|
||||
switch (kind)
|
||||
{
|
95
SOURCES/doxygen-1.7.1-config.patch
Normal file
95
SOURCES/doxygen-1.7.1-config.patch
Normal file
@ -0,0 +1,95 @@
|
||||
diff -up doxygen-1.7.1/addon/doxywizard/Makefile.in.config doxygen-1.7.1/addon/doxywizard/Makefile.in
|
||||
--- doxygen-1.7.1/addon/doxywizard/Makefile.in.config 2010-05-23 16:51:31.000000000 +0200
|
||||
+++ doxygen-1.7.1/addon/doxywizard/Makefile.in 2010-07-19 13:38:33.000000000 +0200
|
||||
@@ -10,8 +10,6 @@
|
||||
# See the GNU General Public License for more details.
|
||||
#
|
||||
|
||||
-QMAKE=qmake $(MKSPECS)
|
||||
-
|
||||
all: Makefile.doxywizard
|
||||
$(MAKE) -f Makefile.doxywizard
|
||||
|
||||
@@ -29,11 +27,11 @@ distclean: Makefile.doxywizard
|
||||
$(RM) Makefile.doxywizard
|
||||
|
||||
install:
|
||||
- $(INSTTOOL) -d $(INSTALL)/bin
|
||||
- $(INSTTOOL) -m 755 ../../bin/doxywizard $(INSTALL)/bin
|
||||
- $(INSTTOOL) -d $(INSTALL)/$(MAN1DIR)
|
||||
+ $(INSTTOOL) -d $(DESTDIR)$(INSTALL)/bin
|
||||
+ $(INSTTOOL) -m 755 ../../bin/doxywizard $(DESTDIR)$(INSTALL)/bin
|
||||
+ $(INSTTOOL) -d $(DESTDIR)$(INSTALL)/$(MAN1DIR)
|
||||
cat ../../doc/doxywizard.1 | sed -e "s/DATE/$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > doxywizard.1
|
||||
- $(INSTTOOL) -m 644 doxywizard.1 $(INSTALL)/$(MAN1DIR)/doxywizard.1
|
||||
+ $(INSTTOOL) -m 644 doxywizard.1 $(DESTDIR)$(INSTALL)/$(MAN1DIR)/doxywizard.1
|
||||
rm doxywizard.1
|
||||
|
||||
FORCE:
|
||||
diff -up doxygen-1.7.1/configure.config doxygen-1.7.1/configure
|
||||
--- doxygen-1.7.1/configure.config 2010-06-25 11:46:38.000000000 +0200
|
||||
+++ doxygen-1.7.1/configure 2010-07-19 12:03:53.000000000 +0200
|
||||
@@ -268,9 +268,10 @@ if test "$f_wizard" = YES; then
|
||||
if test -z "$QTDIR"; then
|
||||
echo " QTDIR environment variable not set!"
|
||||
echo -n " Checking for Qt..."
|
||||
- for d in /usr/{lib,share,qt}/{qt-4,qt4,qt,qt*,4} /usr; do
|
||||
+ for d in /usr/{lib64,lib,share,qt}/{qt-4,qt4,qt,qt*,4} /usr; do
|
||||
if test -x "$d/bin/qmake"; then
|
||||
QTDIR=$d
|
||||
+ QMAKE=$d/bin/qmake
|
||||
fi
|
||||
done
|
||||
else
|
||||
@@ -485,6 +486,8 @@ INSTTOOL = $f_insttool
|
||||
DOXYDOCS = ..
|
||||
DOCDIR = $f_docdir
|
||||
QTDIR = $QTDIR
|
||||
+QMAKE = $QMAKE
|
||||
+MAN1DIR = share/man/man1
|
||||
EOF
|
||||
|
||||
if test "$f_dot" != NO; then
|
||||
diff -up doxygen-1.7.1/Makefile.in.config doxygen-1.7.1/Makefile.in
|
||||
--- doxygen-1.7.1/Makefile.in.config 2009-08-20 21:41:13.000000000 +0200
|
||||
+++ doxygen-1.7.1/Makefile.in 2010-07-19 12:03:53.000000000 +0200
|
||||
@@ -44,8 +44,6 @@ distclean: clean
|
||||
|
||||
DATE=$(shell date "+%B %Y")
|
||||
|
||||
-MAN1DIR = man/man1
|
||||
-
|
||||
install: doxywizard_install
|
||||
$(INSTTOOL) -d $(DESTDIR)/$(INSTALL)/bin
|
||||
$(INSTTOOL) -m 755 bin/doxygen $(DESTDIR)/$(INSTALL)/bin
|
||||
diff -up doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf.config doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf
|
||||
--- doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf.config 2008-12-06 14:16:20.000000000 +0100
|
||||
+++ doxygen-1.7.1/tmake/lib/linux-g++/tmake.conf 2010-07-19 12:03:53.000000000 +0200
|
||||
@@ -11,7 +11,7 @@ TMAKE_CC = gcc
|
||||
TMAKE_CFLAGS = -pipe
|
||||
TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
|
||||
TMAKE_CFLAGS_WARN_OFF =
|
||||
-TMAKE_CFLAGS_RELEASE = -O2
|
||||
+TMAKE_CFLAGS_RELEASE = $(RPM_OPT_FLAGS)
|
||||
TMAKE_CFLAGS_DEBUG = -g
|
||||
TMAKE_CFLAGS_SHLIB = -fPIC
|
||||
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
||||
@@ -27,12 +27,12 @@ TMAKE_CXXFLAGS_YACC = $$TMAKE_CFLAGS_YAC
|
||||
|
||||
TMAKE_INCDIR =
|
||||
TMAKE_LIBDIR =
|
||||
-TMAKE_INCDIR_X11 = /usr/X11R6/include
|
||||
-TMAKE_LIBDIR_X11 = /usr/X11R6/lib
|
||||
-TMAKE_INCDIR_QT = $(QTDIR)/include
|
||||
-TMAKE_LIBDIR_QT = $(QTDIR)/lib
|
||||
-TMAKE_INCDIR_OPENGL = /usr/X11R6/include
|
||||
-TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
|
||||
+TMAKE_INCDIR_X11 =
|
||||
+TMAKE_LIBDIR_X11 =
|
||||
+TMAKE_INCDIR_QT =
|
||||
+TMAKE_LIBDIR_QT =
|
||||
+TMAKE_INCDIR_OPENGL =
|
||||
+TMAKE_LIBDIR_OPENGL =
|
||||
|
||||
TMAKE_LINK = g++
|
||||
TMAKE_LINK_SHLIB = g++
|
63
SOURCES/doxygen-1.7.5-timestamp.patch
Normal file
63
SOURCES/doxygen-1.7.5-timestamp.patch
Normal file
@ -0,0 +1,63 @@
|
||||
diff -up doxygen-1.7.5/src/configoptions.cpp.timestamp doxygen-1.7.5/src/configoptions.cpp
|
||||
--- doxygen-1.7.5/src/configoptions.cpp.timestamp 2011-08-03 15:54:50.000000000 +0200
|
||||
+++ doxygen-1.7.5/src/configoptions.cpp 2011-08-23 12:55:56.000000000 +0200
|
||||
@@ -1173,6 +1173,14 @@ void addConfigOptions(Config *cfg)
|
||||
cs->setWidgetType(ConfigString::File);
|
||||
cs->addDependency("GENERATE_HTML");
|
||||
//----
|
||||
+ cb = cfg->addBool(
|
||||
+ "HTML_TIMESTAMP",
|
||||
+ "If the HTML_TIMESTAMP tag is set to YES then the generated HTML\n"
|
||||
+ "documentation will contain the timesstamp.",
|
||||
+ FALSE
|
||||
+ );
|
||||
+ cb->addDependency("GENERATE_HTML");
|
||||
+ //----
|
||||
cs = cfg->addString(
|
||||
"HTML_STYLESHEET",
|
||||
"The HTML_STYLESHEET tag can be used to specify a user-defined cascading\n"
|
||||
diff -up doxygen-1.7.5/src/config.xml.timestamp doxygen-1.7.5/src/config.xml
|
||||
--- doxygen-1.7.5/src/config.xml.timestamp 2011-08-03 15:54:48.000000000 +0200
|
||||
+++ doxygen-1.7.5/src/config.xml 2011-08-23 12:55:56.000000000 +0200
|
||||
@@ -819,6 +819,11 @@ The HTML_FOOTER tag can be used to speci
|
||||
each generated HTML page. If it is left blank doxygen will generate a
|
||||
standard footer.
|
||||
' defval='' depends='GENERATE_HTML'/>
|
||||
+ <option type='bool' id='HTML_TIMESTAMP' docs='
|
||||
+If the HTML_TIMESTAMP tag is set to YES then the generated HTML
|
||||
+documentation will contain the timesstamp.
|
||||
+' defval='' depends='GENERATE_HTML'/>
|
||||
+
|
||||
<option type='string' id='HTML_STYLESHEET' format='file' docs='
|
||||
The HTML_STYLESHEET tag can be used to specify a user-defined cascading
|
||||
style sheet that is used by each HTML page. It can be used to
|
||||
diff -up doxygen-1.7.5/src/htmlgen.cpp.timestamp doxygen-1.7.5/src/htmlgen.cpp
|
||||
--- doxygen-1.7.5/src/htmlgen.cpp.timestamp 2011-08-01 22:10:17.000000000 +0200
|
||||
+++ doxygen-1.7.5/src/htmlgen.cpp 2011-08-23 13:01:16.000000000 +0200
|
||||
@@ -88,7 +88,7 @@ static const char svgpan_script[]=
|
||||
|
||||
static QCString g_header;
|
||||
static QCString g_footer;
|
||||
-
|
||||
+static bool timestamp=false;
|
||||
//------------------------- Pictures for the Tabs ------------------------
|
||||
|
||||
// active
|
||||
@@ -1072,6 +1072,8 @@ void HtmlGenerator::init()
|
||||
{
|
||||
g_footer = defaultHtmlFooter;
|
||||
}
|
||||
+ if (Config_getBool("HTML_TIMESTAMP"))
|
||||
+ timestamp=true;
|
||||
createSubDirs(d);
|
||||
|
||||
QCString fileName=dname+"/tabs.css";
|
||||
@@ -1285,7 +1287,7 @@ QCString HtmlGenerator::writeLogoAsStrin
|
||||
if (timeStamp)
|
||||
{
|
||||
result += theTranslator->trGeneratedAt(
|
||||
- dateToString(TRUE),
|
||||
+ dateToString(timestamp),
|
||||
Config_getString("PROJECT_NAME")
|
||||
);
|
||||
}
|
15
SOURCES/doxygen-1.8.0-rh856725.patch
Normal file
15
SOURCES/doxygen-1.8.0-rh856725.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- doxygen-1.8.0/src/configgen.py 2012-01-29 10:12:54.000000000 -0500
|
||||
+++ doxygen-1.8.0/src/configgen.py 2012-08-07 17:38:54.751696536 -0400
|
||||
@@ -34,8 +34,10 @@
|
||||
if type=='bool':
|
||||
if len(adefval)>0:
|
||||
enabled = adefval
|
||||
- else:
|
||||
- enabled = "TRUE" if defval=='1' else "FALSE"
|
||||
+ elif defval=='1':
|
||||
+ enabled = "TRUE"
|
||||
+ else:
|
||||
+ enabled = "FALSE"
|
||||
print " cb = cfg->addBool("
|
||||
print " \"%s\"," % (name)
|
||||
print " \"%s\"," % (docC)
|
202
SOURCES/gcc8-fortran-equivalence.patch
Normal file
202
SOURCES/gcc8-fortran-equivalence.patch
Normal file
@ -0,0 +1,202 @@
|
||||
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
|
||||
index c373419..880630a 100644
|
||||
--- a/gcc/fortran/gfortran.h
|
||||
+++ b/gcc/fortran/gfortran.h
|
||||
@@ -2867,6 +2867,7 @@ bool gfc_merge_new_implicit (gfc_typespec *);
|
||||
void gfc_set_implicit_none (bool, bool, locus *);
|
||||
void gfc_check_function_type (gfc_namespace *);
|
||||
bool gfc_is_intrinsic_typename (const char *);
|
||||
+bool check_conflict (symbol_attribute *, const char *, locus *);
|
||||
|
||||
gfc_typespec *gfc_get_default_type (const char *, gfc_namespace *);
|
||||
bool gfc_set_default_type (gfc_symbol *, int, gfc_namespace *);
|
||||
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
|
||||
index 67ad504..29b40fd 100644
|
||||
--- a/gcc/fortran/symbol.c
|
||||
+++ b/gcc/fortran/symbol.c
|
||||
@@ -363,7 +363,7 @@ gfc_check_function_type (gfc_namespace *ns)
|
||||
goto conflict_std;\
|
||||
}
|
||||
|
||||
-static bool
|
||||
+bool
|
||||
check_conflict (symbol_attribute *attr, const char *name, locus *where)
|
||||
{
|
||||
static const char *dummy = "DUMMY", *save = "SAVE", *pointer = "POINTER",
|
||||
@@ -496,7 +496,9 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
|
||||
conf (allocatable, elemental);
|
||||
|
||||
conf (in_common, automatic);
|
||||
+#if 0
|
||||
conf (in_equivalence, automatic);
|
||||
+#endif
|
||||
conf (result, automatic);
|
||||
conf (use_assoc, automatic);
|
||||
conf (dummy, automatic);
|
||||
diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c
|
||||
index 36370eb..4cfaf61 100644
|
||||
--- a/gcc/fortran/trans-common.c
|
||||
+++ b/gcc/fortran/trans-common.c
|
||||
@@ -948,6 +948,61 @@ add_condition (segment_info *f, gfc_equiv *eq1, gfc_equiv *eq2)
|
||||
confirm_condition (f, eq1, n, eq2);
|
||||
}
|
||||
|
||||
+static void
|
||||
+accumulate_equivalence_attributes (symbol_attribute *dummy_symbol, gfc_equiv *e)
|
||||
+{
|
||||
+ symbol_attribute attr = e->expr->symtree->n.sym->attr;
|
||||
+
|
||||
+ dummy_symbol->dummy |= attr.dummy;
|
||||
+ dummy_symbol->pointer |= attr.pointer;
|
||||
+ dummy_symbol->target |= attr.target;
|
||||
+ dummy_symbol->external |= attr.external;
|
||||
+ dummy_symbol->intrinsic |= attr.intrinsic;
|
||||
+ dummy_symbol->allocatable |= attr.allocatable;
|
||||
+ dummy_symbol->elemental |= attr.elemental;
|
||||
+ dummy_symbol->recursive |= attr.recursive;
|
||||
+ dummy_symbol->in_common |= attr.in_common;
|
||||
+ dummy_symbol->result |= attr.result;
|
||||
+ dummy_symbol->in_namelist |= attr.in_namelist;
|
||||
+ dummy_symbol->optional |= attr.optional;
|
||||
+ dummy_symbol->entry |= attr.entry;
|
||||
+ dummy_symbol->function |= attr.function;
|
||||
+ dummy_symbol->subroutine |= attr.subroutine;
|
||||
+ dummy_symbol->dimension |= attr.dimension;
|
||||
+ dummy_symbol->in_equivalence |= attr.in_equivalence;
|
||||
+ dummy_symbol->use_assoc |= attr.use_assoc;
|
||||
+ dummy_symbol->cray_pointer |= attr.cray_pointer;
|
||||
+ dummy_symbol->cray_pointee |= attr.cray_pointee;
|
||||
+ dummy_symbol->data |= attr.data;
|
||||
+ dummy_symbol->value |= attr.value;
|
||||
+ dummy_symbol->volatile_ |= attr.volatile_;
|
||||
+ dummy_symbol->is_protected |= attr.is_protected;
|
||||
+ dummy_symbol->is_bind_c |= attr.is_bind_c;
|
||||
+ dummy_symbol->procedure |= attr.procedure;
|
||||
+ dummy_symbol->proc_pointer |= attr.proc_pointer;
|
||||
+ dummy_symbol->abstract |= attr.abstract;
|
||||
+ dummy_symbol->asynchronous |= attr.asynchronous;
|
||||
+ dummy_symbol->codimension |= attr.codimension;
|
||||
+ dummy_symbol->contiguous |= attr.contiguous;
|
||||
+ dummy_symbol->generic |= attr.generic;
|
||||
+ dummy_symbol->automatic |= attr.automatic;
|
||||
+ dummy_symbol->threadprivate |= attr.threadprivate;
|
||||
+ dummy_symbol->omp_declare_target |= attr.omp_declare_target;
|
||||
+ dummy_symbol->omp_declare_target_link |= attr.omp_declare_target_link;
|
||||
+ dummy_symbol->oacc_declare_copyin |= attr.oacc_declare_copyin;
|
||||
+ dummy_symbol->oacc_declare_create |= attr.oacc_declare_create;
|
||||
+ dummy_symbol->oacc_declare_deviceptr |= attr.oacc_declare_deviceptr;
|
||||
+ dummy_symbol->oacc_declare_device_resident
|
||||
+ |= attr.oacc_declare_device_resident;
|
||||
+
|
||||
+ /* Not strictly correct, but probably close enough. */
|
||||
+ if (attr.save > dummy_symbol->save)
|
||||
+ dummy_symbol->save = attr.save;
|
||||
+ if (attr.intent > dummy_symbol->intent)
|
||||
+ dummy_symbol->intent = attr.intent;
|
||||
+ if (attr.access > dummy_symbol->access)
|
||||
+ dummy_symbol->access = attr.access;
|
||||
+}
|
||||
|
||||
/* Given a segment element, search through the equivalence lists for unused
|
||||
conditions that involve the symbol. Add these rules to the segment. */
|
||||
@@ -966,8 +1021,11 @@ find_equivalence (segment_info *n)
|
||||
|
||||
/* Search the equivalence list, including the root (first) element
|
||||
for the symbol that owns the segment. */
|
||||
+ symbol_attribute dummy_symbol;
|
||||
+ memset (&dummy_symbol, 0, sizeof (dummy_symbol));
|
||||
for (e2 = e1; e2; e2 = e2->eq)
|
||||
{
|
||||
+ accumulate_equivalence_attributes (&dummy_symbol, e2);
|
||||
if (!e2->used && e2->expr->symtree->n.sym == n->sym)
|
||||
{
|
||||
eq = e2;
|
||||
@@ -975,6 +1033,8 @@ find_equivalence (segment_info *n)
|
||||
}
|
||||
}
|
||||
|
||||
+ check_conflict (&dummy_symbol, e1->expr->symtree->name, &e1->expr->where);
|
||||
+
|
||||
/* Go to the next root element. */
|
||||
if (eq == NULL)
|
||||
continue;
|
||||
diff -Nrcp gcc-8.2.1-20180801/gcc/fortran/trans-common.c save/gcc/fortran/trans-common.c
|
||||
*** a/gcc/fortran/trans-common.c 2018-08-14 18:17:28.000000000 -0400
|
||||
--- b/gcc/fortran/trans-common.c 2018-08-14 17:57:51.000000000 -0400
|
||||
*************** build_field (segment_info *h, tree union
|
||||
*** 339,345 ****
|
||||
/* Get storage for local equivalence. */
|
||||
|
||||
static tree
|
||||
! build_equiv_decl (tree union_type, bool is_init, bool is_saved)
|
||||
{
|
||||
tree decl;
|
||||
char name[18];
|
||||
--- 339,345 ----
|
||||
/* Get storage for local equivalence. */
|
||||
|
||||
static tree
|
||||
! build_equiv_decl (tree union_type, bool is_init, bool is_saved, bool is_auto)
|
||||
{
|
||||
tree decl;
|
||||
char name[18];
|
||||
*************** build_equiv_decl (tree union_type, bool
|
||||
*** 359,366 ****
|
||||
DECL_ARTIFICIAL (decl) = 1;
|
||||
DECL_IGNORED_P (decl) = 1;
|
||||
|
||||
! if (!gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))
|
||||
! || is_saved)
|
||||
TREE_STATIC (decl) = 1;
|
||||
|
||||
TREE_ADDRESSABLE (decl) = 1;
|
||||
--- 359,367 ----
|
||||
DECL_ARTIFICIAL (decl) = 1;
|
||||
DECL_IGNORED_P (decl) = 1;
|
||||
|
||||
! if (!is_auto
|
||||
! && (!gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))
|
||||
! || is_saved))
|
||||
TREE_STATIC (decl) = 1;
|
||||
|
||||
TREE_ADDRESSABLE (decl) = 1;
|
||||
*************** create_common (gfc_common_head *com, seg
|
||||
*** 611,616 ****
|
||||
--- 612,618 ----
|
||||
tree decl;
|
||||
bool is_init = false;
|
||||
bool is_saved = false;
|
||||
+ bool is_auto = false;
|
||||
|
||||
/* Declare the variables inside the common block.
|
||||
If the current common block contains any equivalence object, then
|
||||
*************** create_common (gfc_common_head *com, seg
|
||||
*** 654,659 ****
|
||||
--- 656,665 ----
|
||||
/* Has SAVE attribute. */
|
||||
if (s->sym->attr.save)
|
||||
is_saved = true;
|
||||
+
|
||||
+ /* Has AUTOMATIC attribute. */
|
||||
+ if (s->sym->attr.automatic)
|
||||
+ is_auto = true;
|
||||
}
|
||||
|
||||
finish_record_layout (rli, true);
|
||||
*************** create_common (gfc_common_head *com, seg
|
||||
*** 661,667 ****
|
||||
if (com)
|
||||
decl = build_common_decl (com, union_type, is_init);
|
||||
else
|
||||
! decl = build_equiv_decl (union_type, is_init, is_saved);
|
||||
|
||||
if (is_init)
|
||||
{
|
||||
--- 667,673 ----
|
||||
if (com)
|
||||
decl = build_common_decl (com, union_type, is_init);
|
||||
else
|
||||
! decl = build_equiv_decl (union_type, is_init, is_saved, is_auto);
|
||||
|
||||
if (is_init)
|
||||
{
|
30
SOURCES/gcc8-fortran-fdec-include-doc.patch
Normal file
30
SOURCES/gcc8-fortran-fdec-include-doc.patch
Normal file
@ -0,0 +1,30 @@
|
||||
2018-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* invoke.texi (-fdec-include): Document.
|
||||
|
||||
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
|
||||
index ee84a0be8b1..33afab1517f 100644
|
||||
--- a/gcc/fortran/invoke.texi
|
||||
+++ b/gcc/fortran/invoke.texi
|
||||
@@ -119,7 +119,7 @@ by type. Explanations are in the following sections.
|
||||
@gccoptlist{-fall-intrinsics -fbackslash -fcray-pointer -fd-lines-as-code @gol
|
||||
-fd-lines-as-comments @gol
|
||||
-fdec -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math @gol
|
||||
--fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
|
||||
+-fdec-include -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
|
||||
-fdefault-real-10 -fdefault-real-16 -fdollar-ok -ffixed-line-length-@var{n} @gol
|
||||
-ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol
|
||||
-ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol
|
||||
@@ -277,6 +277,12 @@ functions (e.g. TAND, ATAND, etc...) for compatability with older code.
|
||||
Enable DEC-style STATIC and AUTOMATIC attributes to explicitly specify
|
||||
the storage of variables and other objects.
|
||||
|
||||
+@item -fdec-include
|
||||
+@opindex @code{fdec-include}
|
||||
+Enable parsing of INCLUDE as a statement in addition to parsing it as
|
||||
+INCLUDE line. When parsed as INCLUDE statement, INCLUDE does not have to
|
||||
+be on a single line and can use line continuations.
|
||||
+
|
||||
@item -fdollar-ok
|
||||
@opindex @code{fdollar-ok}
|
||||
@cindex @code{$}
|
687
SOURCES/gcc8-fortran-fdec-include.patch
Normal file
687
SOURCES/gcc8-fortran-fdec-include.patch
Normal file
@ -0,0 +1,687 @@
|
||||
2018-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
Mark Eggleston <mark.eggleston@codethink.com>
|
||||
|
||||
* lang.opt (fdec-include): New option.
|
||||
* options.c (set_dec_flags): Set also flag_dec_include.
|
||||
* scanner.c (include_line): Change return type from bool to int.
|
||||
In fixed form allow spaces in between include keyword letters.
|
||||
For -fdec-include, allow in fixed form 0 in column 6. With
|
||||
-fdec-include return -1 if the parsed line is not full include
|
||||
statement and it could be successfully completed on continuation
|
||||
lines.
|
||||
(include_stmt): New function.
|
||||
(load_file): Adjust include_line caller. If it returns -1, keep
|
||||
trying include_stmt until it stops returning -1 whenever adding
|
||||
further line of input.
|
||||
|
||||
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||
index 2b7f2903761..fe0c6934220 100644
|
||||
--- a/gcc/fortran/lang.opt
|
||||
+++ b/gcc/fortran/lang.opt
|
||||
@@ -440,6 +440,10 @@ fdec
|
||||
Fortran Var(flag_dec_pad_with_spaces)
|
||||
For character to integer conversions, use spaces for the pad rather than NUL.
|
||||
|
||||
+fdec-include
|
||||
+Fortran Var(flag_dec_include)
|
||||
+Enable legacy parsing of INCLUDE as statement.
|
||||
+
|
||||
fdec-intrinsic-ints
|
||||
Fortran Var(flag_dec_intrinsic_ints)
|
||||
Enable kind-specific variants of integer intrinsic functions.
|
||||
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||
index 73f5389361d..e59ba31ba7b 100644
|
||||
--- a/gcc/fortran/options.c
|
||||
+++ b/gcc/fortran/options.c
|
||||
@@ -68,6 +68,7 @@ set_dec_flags (int value)
|
||||
flag_dec_intrinsic_ints |= value;
|
||||
flag_dec_static |= value;
|
||||
flag_dec_math |= value;
|
||||
+ flag_dec_include |= value;
|
||||
}
|
||||
|
||||
|
||||
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
|
||||
index 55d6dafdb5d..5b27ab5e52d 100644
|
||||
--- a/gcc/fortran/scanner.c
|
||||
+++ b/gcc/fortran/scanner.c
|
||||
@@ -2135,14 +2135,18 @@ static bool load_file (const char *, const char *, bool);
|
||||
/* include_line()-- Checks a line buffer to see if it is an include
|
||||
line. If so, we call load_file() recursively to load the included
|
||||
file. We never return a syntax error because a statement like
|
||||
- "include = 5" is perfectly legal. We return false if no include was
|
||||
- processed or true if we matched an include. */
|
||||
+ "include = 5" is perfectly legal. We return 0 if no include was
|
||||
+ processed, 1 if we matched an include or -1 if include was
|
||||
+ partially processed, but will need continuation lines. */
|
||||
|
||||
-static bool
|
||||
+static int
|
||||
include_line (gfc_char_t *line)
|
||||
{
|
||||
gfc_char_t quote, *c, *begin, *stop;
|
||||
char *filename;
|
||||
+ const char *include = "include";
|
||||
+ bool allow_continuation = flag_dec_include;
|
||||
+ int i;
|
||||
|
||||
c = line;
|
||||
|
||||
@@ -2158,42 +2162,133 @@ include_line (gfc_char_t *line)
|
||||
else
|
||||
{
|
||||
if ((*c == '!' || *c == 'c' || *c == 'C' || *c == '*')
|
||||
- && c[1] == '$' && (c[2] == ' ' || c[2] == '\t'))
|
||||
+ && c[1] == '$' && c[2] == ' ')
|
||||
c += 3;
|
||||
}
|
||||
}
|
||||
|
||||
- while (*c == ' ' || *c == '\t')
|
||||
- c++;
|
||||
+ if (gfc_current_form == FORM_FREE)
|
||||
+ {
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ if (gfc_wide_strncasecmp (c, "include", 7))
|
||||
+ {
|
||||
+ if (!allow_continuation)
|
||||
+ return 0;
|
||||
+ for (i = 0; i < 7; ++i)
|
||||
+ {
|
||||
+ gfc_char_t c1 = gfc_wide_tolower (*c);
|
||||
+ if (c1 != (unsigned char) include[i])
|
||||
+ break;
|
||||
+ c++;
|
||||
+ }
|
||||
+ if (i == 0 || *c != '&')
|
||||
+ return 0;
|
||||
+ c++;
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ if (*c == '\0' || *c == '!')
|
||||
+ return -1;
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
- if (gfc_wide_strncasecmp (c, "include", 7))
|
||||
- return false;
|
||||
+ c += 7;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ if (flag_dec_include && *c == '0' && c - line == 5)
|
||||
+ {
|
||||
+ c++;
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ }
|
||||
+ if (c - line < 6)
|
||||
+ allow_continuation = false;
|
||||
+ for (i = 0; i < 7; ++i)
|
||||
+ {
|
||||
+ gfc_char_t c1 = gfc_wide_tolower (*c);
|
||||
+ if (c1 != (unsigned char) include[i])
|
||||
+ break;
|
||||
+ c++;
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ }
|
||||
+ if (!allow_continuation)
|
||||
+ {
|
||||
+ if (i != 7)
|
||||
+ return 0;
|
||||
+ }
|
||||
+ else if (i != 7)
|
||||
+ {
|
||||
+ if (i == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* At the end of line or comment this might be continued. */
|
||||
+ if (*c == '\0' || *c == '!')
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- c += 7;
|
||||
while (*c == ' ' || *c == '\t')
|
||||
c++;
|
||||
|
||||
/* Find filename between quotes. */
|
||||
-
|
||||
+
|
||||
quote = *c++;
|
||||
if (quote != '"' && quote != '\'')
|
||||
- return false;
|
||||
+ {
|
||||
+ if (allow_continuation)
|
||||
+ {
|
||||
+ if (gfc_current_form == FORM_FREE)
|
||||
+ {
|
||||
+ if (quote == '&')
|
||||
+ {
|
||||
+ while (*c == ' ' || *c == '\t')
|
||||
+ c++;
|
||||
+ if (*c == '\0' || *c == '!')
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+ else if (quote == '\0' || quote == '!')
|
||||
+ return -1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
begin = c;
|
||||
|
||||
+ bool cont = false;
|
||||
while (*c != quote && *c != '\0')
|
||||
- c++;
|
||||
+ {
|
||||
+ if (allow_continuation && gfc_current_form == FORM_FREE)
|
||||
+ {
|
||||
+ if (*c == '&')
|
||||
+ cont = true;
|
||||
+ else if (*c != ' ' && *c != '\t')
|
||||
+ cont = false;
|
||||
+ }
|
||||
+ c++;
|
||||
+ }
|
||||
|
||||
if (*c == '\0')
|
||||
- return false;
|
||||
+ {
|
||||
+ if (allow_continuation
|
||||
+ && (cont || gfc_current_form != FORM_FREE))
|
||||
+ return -1;
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
stop = c++;
|
||||
-
|
||||
+
|
||||
while (*c == ' ' || *c == '\t')
|
||||
c++;
|
||||
|
||||
if (*c != '\0' && *c != '!')
|
||||
- return false;
|
||||
+ return 0;
|
||||
|
||||
/* We have an include line at this point. */
|
||||
|
||||
@@ -2205,9 +2300,130 @@ include_line (gfc_char_t *line)
|
||||
exit (FATAL_EXIT_CODE);
|
||||
|
||||
free (filename);
|
||||
- return true;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
+/* Similarly, but try to parse an INCLUDE statement, using gfc_next_char etc.
|
||||
+ APIs. Return 1 if recognized as valid INCLUDE statement and load_file has
|
||||
+ been called, 0 if it is not a valid INCLUDE statement and -1 if eof has
|
||||
+ been encountered while parsing it. */
|
||||
+static int
|
||||
+include_stmt (gfc_linebuf *b)
|
||||
+{
|
||||
+ int ret = 0, i, length;
|
||||
+ const char *include = "include";
|
||||
+ gfc_char_t c, quote = 0;
|
||||
+ locus str_locus;
|
||||
+ char *filename;
|
||||
+
|
||||
+ continue_flag = 0;
|
||||
+ end_flag = 0;
|
||||
+ gcc_attribute_flag = 0;
|
||||
+ openmp_flag = 0;
|
||||
+ openacc_flag = 0;
|
||||
+ continue_count = 0;
|
||||
+ continue_line = 0;
|
||||
+ gfc_current_locus.lb = b;
|
||||
+ gfc_current_locus.nextc = b->line;
|
||||
+
|
||||
+ gfc_skip_comments ();
|
||||
+ gfc_gobble_whitespace ();
|
||||
+
|
||||
+ for (i = 0; i < 7; i++)
|
||||
+ {
|
||||
+ c = gfc_next_char ();
|
||||
+ if (c != (unsigned char) include[i])
|
||||
+ {
|
||||
+ if (gfc_current_form == FORM_FIXED
|
||||
+ && i == 0
|
||||
+ && c == '0'
|
||||
+ && gfc_current_locus.nextc == b->line + 6)
|
||||
+ {
|
||||
+ gfc_gobble_whitespace ();
|
||||
+ i--;
|
||||
+ continue;
|
||||
+ }
|
||||
+ gcc_assert (i != 0);
|
||||
+ if (c == '\n')
|
||||
+ {
|
||||
+ gfc_advance_line ();
|
||||
+ gfc_skip_comments ();
|
||||
+ if (gfc_at_eof ())
|
||||
+ ret = -1;
|
||||
+ }
|
||||
+ goto do_ret;
|
||||
+ }
|
||||
+ }
|
||||
+ gfc_gobble_whitespace ();
|
||||
+
|
||||
+ c = gfc_next_char ();
|
||||
+ if (c == '\'' || c == '"')
|
||||
+ quote = c;
|
||||
+ else
|
||||
+ {
|
||||
+ if (c == '\n')
|
||||
+ {
|
||||
+ gfc_advance_line ();
|
||||
+ gfc_skip_comments ();
|
||||
+ if (gfc_at_eof ())
|
||||
+ ret = -1;
|
||||
+ }
|
||||
+ goto do_ret;
|
||||
+ }
|
||||
+
|
||||
+ str_locus = gfc_current_locus;
|
||||
+ length = 0;
|
||||
+ do
|
||||
+ {
|
||||
+ c = gfc_next_char_literal (INSTRING_NOWARN);
|
||||
+ if (c == quote)
|
||||
+ break;
|
||||
+ if (c == '\n')
|
||||
+ {
|
||||
+ gfc_advance_line ();
|
||||
+ gfc_skip_comments ();
|
||||
+ if (gfc_at_eof ())
|
||||
+ ret = -1;
|
||||
+ goto do_ret;
|
||||
+ }
|
||||
+ length++;
|
||||
+ }
|
||||
+ while (1);
|
||||
+
|
||||
+ gfc_gobble_whitespace ();
|
||||
+ c = gfc_next_char ();
|
||||
+ if (c != '\n')
|
||||
+ goto do_ret;
|
||||
+
|
||||
+ gfc_current_locus = str_locus;
|
||||
+ ret = 1;
|
||||
+ filename = XNEWVEC (char, length + 1);
|
||||
+ for (i = 0; i < length; i++)
|
||||
+ {
|
||||
+ c = gfc_next_char_literal (INSTRING_WARN);
|
||||
+ gcc_assert (gfc_wide_fits_in_byte (c));
|
||||
+ filename[i] = (unsigned char) c;
|
||||
+ }
|
||||
+ filename[length] = '\0';
|
||||
+ if (!load_file (filename, NULL, false))
|
||||
+ exit (FATAL_EXIT_CODE);
|
||||
+
|
||||
+ free (filename);
|
||||
+
|
||||
+do_ret:
|
||||
+ continue_flag = 0;
|
||||
+ end_flag = 0;
|
||||
+ gcc_attribute_flag = 0;
|
||||
+ openmp_flag = 0;
|
||||
+ openacc_flag = 0;
|
||||
+ continue_count = 0;
|
||||
+ continue_line = 0;
|
||||
+ memset (&gfc_current_locus, '\0', sizeof (locus));
|
||||
+ memset (&openmp_locus, '\0', sizeof (locus));
|
||||
+ memset (&openacc_locus, '\0', sizeof (locus));
|
||||
+ memset (&gcc_attribute_locus, '\0', sizeof (locus));
|
||||
+ return ret;
|
||||
+}
|
||||
|
||||
/* Load a file into memory by calling load_line until the file ends. */
|
||||
|
||||
@@ -2215,7 +2431,7 @@ static bool
|
||||
load_file (const char *realfilename, const char *displayedname, bool initial)
|
||||
{
|
||||
gfc_char_t *line;
|
||||
- gfc_linebuf *b;
|
||||
+ gfc_linebuf *b, *include_b = NULL;
|
||||
gfc_file *f;
|
||||
FILE *input;
|
||||
int len, line_len;
|
||||
@@ -2318,6 +2534,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
|
||||
for (;;)
|
||||
{
|
||||
int trunc = load_line (input, &line, &line_len, NULL);
|
||||
+ int inc_line;
|
||||
|
||||
len = gfc_wide_strlen (line);
|
||||
if (feof (input) && len == 0)
|
||||
@@ -2366,11 +2583,12 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
|
||||
}
|
||||
|
||||
/* Preprocessed files have preprocessor lines added before the byte
|
||||
- order mark, so first_line is not about the first line of the file
|
||||
+ order mark, so first_line is not about the first line of the file
|
||||
but the first line that's not a preprocessor line. */
|
||||
first_line = false;
|
||||
|
||||
- if (include_line (line))
|
||||
+ inc_line = include_line (line);
|
||||
+ if (inc_line > 0)
|
||||
{
|
||||
current_file->line++;
|
||||
continue;
|
||||
@@ -2403,6 +2621,36 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
|
||||
|
||||
while (file_changes_cur < file_changes_count)
|
||||
file_changes[file_changes_cur++].lb = b;
|
||||
+
|
||||
+ if (flag_dec_include)
|
||||
+ {
|
||||
+ if (include_b && b != include_b)
|
||||
+ {
|
||||
+ int inc_line2 = include_stmt (include_b);
|
||||
+ if (inc_line2 == 0)
|
||||
+ include_b = NULL;
|
||||
+ else if (inc_line2 > 0)
|
||||
+ {
|
||||
+ do
|
||||
+ {
|
||||
+ if (gfc_current_form == FORM_FIXED)
|
||||
+ {
|
||||
+ for (gfc_char_t *p = include_b->line; *p; p++)
|
||||
+ *p = ' ';
|
||||
+ }
|
||||
+ else
|
||||
+ include_b->line[0] = '\0';
|
||||
+ if (include_b == b)
|
||||
+ break;
|
||||
+ include_b = include_b->next;
|
||||
+ }
|
||||
+ while (1);
|
||||
+ include_b = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ if (inc_line == -1 && !include_b)
|
||||
+ include_b = b;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Release the line buffer allocated in load_line. */
|
||||
diff --git a/gcc/testsuite/gfortran.dg/gomp/include_1.f b/gcc/testsuite/gfortran.dg/gomp/include_1.f
|
||||
new file mode 100644
|
||||
index 00000000000..715eb5b97e3
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/gomp/include_1.f
|
||||
@@ -0,0 +1,49 @@
|
||||
+c { dg-do compile }
|
||||
+c { dg-options "-fopenmp -fdec" }
|
||||
+ subroutine foo
|
||||
+ implicit none
|
||||
+c$ 0include 'include_1.inc'
|
||||
+ i = 1
|
||||
+ end subroutine foo
|
||||
+ subroutine bar
|
||||
+ implicit none
|
||||
+ i
|
||||
+C$ ;n
|
||||
+ +c
|
||||
+
|
||||
+c some comment
|
||||
+
|
||||
+*$ ll
|
||||
+C comment line
|
||||
+ uu
|
||||
+ DD
|
||||
+ ee'include_1.inc'
|
||||
+ i = 1
|
||||
+ end subroutine bar
|
||||
+ subroutine baz
|
||||
+ implicit none
|
||||
+ 0include
|
||||
+ + 'include_1.inc'
|
||||
+ i = 1
|
||||
+ end subroutine baz
|
||||
+ subroutine qux
|
||||
+ implicit none
|
||||
+!$ i n C lude 'inc
|
||||
+* another comment line
|
||||
+ &lude_1.inc'
|
||||
+ i = 1
|
||||
+ end subroutine qux
|
||||
+ subroutine quux
|
||||
+ implicit none
|
||||
+C$ 0inc
|
||||
+*$ 1lud
|
||||
+c$ 2e '
|
||||
+!$ 3include_1.inc'
|
||||
+ i = 1
|
||||
+ end subroutine quux
|
||||
+ program include_12
|
||||
+ implicit none
|
||||
+ include
|
||||
+! comment
|
||||
+c$ +'include_1.inc'
|
||||
+ end program
|
||||
diff --git a/gcc/testsuite/gfortran.dg/gomp/include_1.inc b/gcc/testsuite/gfortran.dg/gomp/include_1.inc
|
||||
new file mode 100644
|
||||
index 00000000000..5dd841c5573
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/gomp/include_1.inc
|
||||
@@ -0,0 +1 @@
|
||||
+ integer i
|
||||
diff --git a/gcc/testsuite/gfortran.dg/gomp/include_2.f90 b/gcc/testsuite/gfortran.dg/gomp/include_2.f90
|
||||
new file mode 100644
|
||||
index 00000000000..9c4ff15afb8
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/gomp/include_2.f90
|
||||
@@ -0,0 +1,32 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fopenmp -fdec-include" }
|
||||
+subroutine foo
|
||||
+ implicit none
|
||||
+!$ incl& ! comment1
|
||||
+!$ &u&
|
||||
+!$ &de & ! comment2
|
||||
+!$ 'include&
|
||||
+ &_1.inc'
|
||||
+ i = 1
|
||||
+end subroutine foo
|
||||
+subroutine bar
|
||||
+ implicit none
|
||||
+!$ include &
|
||||
+
|
||||
+! comment3
|
||||
+
|
||||
+!$ "include_1.inc"
|
||||
+ i = 1
|
||||
+end subroutine bar
|
||||
+subroutine baz
|
||||
+ implicit none
|
||||
+!$ include&
|
||||
+!$ &'include_1.&
|
||||
+!$ &inc'
|
||||
+ i = 1
|
||||
+end subroutine baz
|
||||
+subroutine qux
|
||||
+ implicit none
|
||||
+!$ include '&
|
||||
+include_1.inc'
|
||||
+end subroutine qux
|
||||
diff --git a/gcc/testsuite/gfortran.dg/include_10.f b/gcc/testsuite/gfortran.dg/include_10.f
|
||||
new file mode 100644
|
||||
index 00000000000..7df2a196954
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/include_10.f
|
||||
@@ -0,0 +1,11 @@
|
||||
+c { dg-do compile }
|
||||
+ subroutine foo
|
||||
+ implicit none
|
||||
+ include 'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine foo
|
||||
+ subroutine bar
|
||||
+ implicit none
|
||||
+ i n cl UD e'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine bar
|
||||
diff --git a/gcc/testsuite/gfortran.dg/include_10.inc b/gcc/testsuite/gfortran.dg/include_10.inc
|
||||
new file mode 100644
|
||||
index 00000000000..5dd841c5573
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/include_10.inc
|
||||
@@ -0,0 +1 @@
|
||||
+ integer i
|
||||
diff --git a/gcc/testsuite/gfortran.dg/include_11.f b/gcc/testsuite/gfortran.dg/include_11.f
|
||||
new file mode 100644
|
||||
index 00000000000..0e68a78c236
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/include_11.f
|
||||
@@ -0,0 +1,20 @@
|
||||
+c { dg-do compile }
|
||||
+ subroutine foo
|
||||
+ implicit none
|
||||
+c We used to accept following in fixed mode. Shall we at least
|
||||
+c warn about it?
|
||||
+include 'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine foo
|
||||
+ subroutine bar
|
||||
+c Likewise here.
|
||||
+ implicit none
|
||||
+ include'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine bar
|
||||
+ subroutine baz
|
||||
+c And here.
|
||||
+ implicit none
|
||||
+ include 'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine baz
|
||||
diff --git a/gcc/testsuite/gfortran.dg/include_12.f b/gcc/testsuite/gfortran.dg/include_12.f
|
||||
new file mode 100644
|
||||
index 00000000000..4b3e3bed075
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/include_12.f
|
||||
@@ -0,0 +1,65 @@
|
||||
+c { dg-do compile }
|
||||
+c { dg-options "-fdec-include" }
|
||||
+ subroutine foo
|
||||
+ implicit none
|
||||
+ 0include 'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine foo
|
||||
+ subroutine bar
|
||||
+ implicit none
|
||||
+ i
|
||||
+ ;n
|
||||
+ +c
|
||||
+
|
||||
+c some comment
|
||||
+
|
||||
+ ll
|
||||
+C comment line
|
||||
+ uu
|
||||
+ DD
|
||||
+ ee'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine bar
|
||||
+ subroutine baz
|
||||
+ implicit none
|
||||
+ 0include
|
||||
+ + 'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine baz
|
||||
+ subroutine qux
|
||||
+ implicit none
|
||||
+ i n C lude 'inc
|
||||
+* another comment line
|
||||
+ &lude_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine qux
|
||||
+ subroutine quux
|
||||
+ implicit none
|
||||
+ 0inc
|
||||
+ 1lud
|
||||
+ 2e '
|
||||
+ 3include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine quux
|
||||
+ program include_12
|
||||
+ implicit none
|
||||
+ include
|
||||
+! comment
|
||||
+ +'include_10.inc'
|
||||
+ end program
|
||||
+ subroutine quuz
|
||||
+ implicit none
|
||||
+ integer include
|
||||
+ include
|
||||
+ +"include_10.inc"
|
||||
+ i = 1
|
||||
+ include
|
||||
+ + = 2
|
||||
+ write (*,*) include
|
||||
+ end subroutine quuz
|
||||
+ subroutine corge
|
||||
+ implicit none
|
||||
+ include
|
||||
+ +'include_10.inc'
|
||||
+ i = 1
|
||||
+ end subroutine corge
|
||||
diff --git a/gcc/testsuite/gfortran.dg/include_13.f90 b/gcc/testsuite/gfortran.dg/include_13.f90
|
||||
new file mode 100644
|
||||
index 00000000000..418ee5585e2
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/include_13.f90
|
||||
@@ -0,0 +1,44 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec" }
|
||||
+subroutine foo
|
||||
+ implicit none
|
||||
+ incl& ! comment1
|
||||
+&u&
|
||||
+ &de & ! comment2
|
||||
+'include&
|
||||
+ &_10.inc'
|
||||
+ i = 1
|
||||
+end subroutine foo
|
||||
+subroutine bar
|
||||
+ implicit none
|
||||
+include &
|
||||
+
|
||||
+! comment3
|
||||
+
|
||||
+"include_10.inc"
|
||||
+ i = 1
|
||||
+end subroutine bar
|
||||
+subroutine baz
|
||||
+ implicit none
|
||||
+ include&
|
||||
+&'include_10.&
|
||||
+&inc'
|
||||
+ i = 1
|
||||
+end subroutine baz
|
||||
+subroutine qux
|
||||
+ implicit none
|
||||
+ include '&
|
||||
+include_10.inc'
|
||||
+end subroutine qux
|
||||
+subroutine quux
|
||||
+ implicit none
|
||||
+ include &
|
||||
+ &'include_10.inc'
|
||||
+ i = 1
|
||||
+end subroutine quux
|
||||
+subroutine quuz
|
||||
+ implicit none
|
||||
+ include &
|
||||
+ &"include_10.inc"
|
||||
+ i = 1
|
||||
+end subroutine quuz
|
144
SOURCES/gcc8-fortran-fpad-source.patch
Normal file
144
SOURCES/gcc8-fortran-fpad-source.patch
Normal file
@ -0,0 +1,144 @@
|
||||
2018-11-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* lang.opt (fpad-source): New option.
|
||||
* scanner.c (load_line): Don't pad fixed form lines if
|
||||
!flag_pad_source.
|
||||
* invoke.texi (-fno-pad-source): Document.
|
||||
|
||||
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
|
||||
index 33afab1517f..d6a278b1cc2 100644
|
||||
--- a/gcc/fortran/invoke.texi
|
||||
+++ b/gcc/fortran/invoke.texi
|
||||
@@ -121,7 +121,7 @@ by type. Explanations are in the following sections.
|
||||
-fdec -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math @gol
|
||||
-fdec-include -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol
|
||||
-fdefault-real-10 -fdefault-real-16 -fdollar-ok -ffixed-line-length-@var{n} @gol
|
||||
--ffixed-line-length-none -ffree-form -ffree-line-length-@var{n} @gol
|
||||
+-ffixed-line-length-none -fpad-source -ffree-form -ffree-line-length-@var{n} @gol
|
||||
-ffree-line-length-none -fimplicit-none -finteger-4-integer-8 @gol
|
||||
-fmax-identifier-length -fmodule-private -ffixed-form -fno-range-check @gol
|
||||
-fopenacc -fopenmp -freal-4-real-10 -freal-4-real-16 -freal-4-real-8 @gol
|
||||
@@ -321,8 +321,9 @@ declared as @code{PUBLIC}.
|
||||
@opindex @code{ffixed-line-length-}@var{n}
|
||||
@cindex file format, fixed
|
||||
Set column after which characters are ignored in typical fixed-form
|
||||
-lines in the source file, and through which spaces are assumed (as
|
||||
-if padded to that length) after the ends of short fixed-form lines.
|
||||
+lines in the source file, and, unless @code{-fno-pad-source}, through which
|
||||
+spaces are assumed (as if padded to that length) after the ends of short
|
||||
+fixed-form lines.
|
||||
|
||||
Popular values for @var{n} include 72 (the
|
||||
standard and the default), 80 (card image), and 132 (corresponding
|
||||
@@ -333,6 +334,15 @@ to them to fill out the line.
|
||||
@option{-ffixed-line-length-0} means the same thing as
|
||||
@option{-ffixed-line-length-none}.
|
||||
|
||||
+@item -fno-pad-source
|
||||
+@opindex @code{fpad-source}
|
||||
+By default fixed-form lines have spaces assumed (as if padded to that length)
|
||||
+after the ends of short fixed-form lines. This is not done either if
|
||||
+@option{-ffixed-line-length-0}, @option{-ffixed-line-length-none} or
|
||||
+if @option{-fno-pad-source} option is used. With any of those options
|
||||
+continued character constants never have implicit spaces appended
|
||||
+to them to fill out the line.
|
||||
+
|
||||
@item -ffree-line-length-@var{n}
|
||||
@opindex @code{ffree-line-length-}@var{n}
|
||||
@cindex file format, free
|
||||
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
|
||||
index fe0c6934220..ae4957e176c 100644
|
||||
--- a/gcc/fortran/lang.opt
|
||||
+++ b/gcc/fortran/lang.opt
|
||||
@@ -536,6 +536,10 @@ ffixed-line-length-
|
||||
Fortran RejectNegative Joined UInteger Var(flag_fixed_line_length) Init(72)
|
||||
-ffixed-line-length-<n> Use n as character line width in fixed mode.
|
||||
|
||||
+fpad-source
|
||||
+Fortran Var(flag_pad_source) Init(1)
|
||||
+Pad shorter fixed form lines to line width with spaces.
|
||||
+
|
||||
ffpe-trap=
|
||||
Fortran RejectNegative JoinedOrMissing
|
||||
-ffpe-trap=[...] Stop on following floating point exceptions.
|
||||
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
|
||||
index 5b27ab5e52d..2ef32b279fe 100644
|
||||
--- a/gcc/fortran/scanner.c
|
||||
+++ b/gcc/fortran/scanner.c
|
||||
@@ -1924,6 +1924,7 @@ next_char:
|
||||
/* Pad lines to the selected line length in fixed form. */
|
||||
if (gfc_current_form == FORM_FIXED
|
||||
&& flag_fixed_line_length != 0
|
||||
+ && flag_pad_source
|
||||
&& !preprocessor_flag
|
||||
&& c != EOF)
|
||||
{
|
||||
diff --git a/gcc/testsuite/gfortran.dg/pad_source_1.f b/gcc/testsuite/gfortran.dg/pad_source_1.f
|
||||
new file mode 100644
|
||||
index 00000000000..a616bba60de
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/pad_source_1.f
|
||||
@@ -0,0 +1,8 @@
|
||||
+c { dg-do run }
|
||||
+c { dg-skip-if "non-standard options" { *-*-* } { "-ffixed-line-length*" "-f*pad-source" } }
|
||||
+ character(80) a
|
||||
+ a = 'abc
|
||||
+ +def'
|
||||
+ if (a(:61) .ne. 'abc') stop 1
|
||||
+ if (a(62:) .ne. 'def') stop 2
|
||||
+ end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/pad_source_2.f b/gcc/testsuite/gfortran.dg/pad_source_2.f
|
||||
new file mode 100644
|
||||
index 00000000000..bcf9439cd14
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/pad_source_2.f
|
||||
@@ -0,0 +1,9 @@
|
||||
+c { dg-do run }
|
||||
+c { dg-skip-if "non-standard options" { *-*-* } { "-ffixed-line-length*" } }
|
||||
+c { dg-options "-fpad-source" }
|
||||
+ character(80) a
|
||||
+ a = 'abc
|
||||
+ +def'
|
||||
+ if (a(:61) .ne. 'abc') stop 1
|
||||
+ if (a(62:) .ne. 'def') stop 2
|
||||
+ end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/pad_source_3.f b/gcc/testsuite/gfortran.dg/pad_source_3.f
|
||||
new file mode 100644
|
||||
index 00000000000..8fbdae0d67d
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/pad_source_3.f
|
||||
@@ -0,0 +1,8 @@
|
||||
+c { dg-do run }
|
||||
+c { dg-skip-if "non-standard options" { *-*-* } { "-ffixed-line-length*" } }
|
||||
+c { dg-options "-fno-pad-source" }
|
||||
+ character(80) a
|
||||
+ a = 'abc
|
||||
+ +def'
|
||||
+ if (a .ne. 'abcdef') stop 1
|
||||
+ end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/pad_source_4.f b/gcc/testsuite/gfortran.dg/pad_source_4.f
|
||||
new file mode 100644
|
||||
index 00000000000..5479cec217a
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/pad_source_4.f
|
||||
@@ -0,0 +1,7 @@
|
||||
+c { dg-do run }
|
||||
+c { dg-options "-ffixed-line-length-none" }
|
||||
+ character(80) a
|
||||
+ a = 'abc
|
||||
+ +def'
|
||||
+ if (a .ne. 'abcdef') stop 1
|
||||
+ end
|
||||
diff --git a/gcc/testsuite/gfortran.dg/pad_source_5.f b/gcc/testsuite/gfortran.dg/pad_source_5.f
|
||||
new file mode 100644
|
||||
index 00000000000..4122c85ba66
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/pad_source_5.f
|
||||
@@ -0,0 +1,7 @@
|
||||
+c { dg-do run }
|
||||
+c { dg-options "-ffixed-line-length-0" }
|
||||
+ character(80) a
|
||||
+ a = 'abc
|
||||
+ +def'
|
||||
+ if (a .ne. 'abcdef') stop 1
|
||||
+ end
|
87
SOURCES/gcc8-fortran-pr87919-2.patch
Normal file
87
SOURCES/gcc8-fortran-pr87919-2.patch
Normal file
@ -0,0 +1,87 @@
|
||||
2018-12-03 Fritz Reese <fritzoreese@gmail.com>
|
||||
Mark Eggleston <mark.eggleston@codethink.co.uk>
|
||||
|
||||
PR fortran/87919
|
||||
* options.c (SET_FLAG, SET_BITFLAG, SET_BITFLAG2): New macros.
|
||||
(set_dec_flags): Set/unset DEC and std flags according to value.
|
||||
(post_dec_flags, set_init_local_zero): New functions.
|
||||
(gfc_init_options): Use set_init_local_zero and post_dec_flags.
|
||||
(gfc_handle_options) <case OPT_fcheck_array_temporaries>: Use
|
||||
SET_BITFLAG.
|
||||
<case OPT_finit_local_zero>: Use set_init_local_zero.
|
||||
<case OPT_fdec>: Pass value to set_dec_flags.
|
||||
<case OPT_fdec_structure>: Remove.
|
||||
|
||||
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||
index b35bed32974..48e35e3524d 100644
|
||||
--- a/gcc/fortran/options.c
|
||||
+++ b/gcc/fortran/options.c
|
||||
@@ -147,11 +147,7 @@ gfc_init_options (unsigned int decoded_options_count,
|
||||
|
||||
gfc_option.flag_preprocessed = 0;
|
||||
gfc_option.flag_d_lines = -1;
|
||||
- gfc_option.flag_init_integer = GFC_INIT_INTEGER_OFF;
|
||||
- gfc_option.flag_init_integer_value = 0;
|
||||
- gfc_option.flag_init_logical = GFC_INIT_LOGICAL_OFF;
|
||||
- gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF;
|
||||
- gfc_option.flag_init_character_value = (char)0;
|
||||
+ set_init_local_zero (0);
|
||||
|
||||
gfc_option.fpe = 0;
|
||||
/* All except GFC_FPE_INEXACT. */
|
||||
@@ -261,6 +257,9 @@ gfc_post_options (const char **pfilename)
|
||||
char *source_path;
|
||||
int i;
|
||||
|
||||
+ /* Finalize DEC flags. */
|
||||
+ post_dec_flags (flag_dec);
|
||||
+
|
||||
/* Excess precision other than "fast" requires front-end
|
||||
support. */
|
||||
if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
|
||||
@@ -644,7 +643,7 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
|
||||
break;
|
||||
|
||||
case OPT_fcheck_array_temporaries:
|
||||
- gfc_option.rtcheck |= GFC_RTCHECK_ARRAY_TEMPS;
|
||||
+ SET_BITFLAG (gfc_option.rtcheck, value, GFC_RTCHECK_ARRAY_TEMPS);
|
||||
break;
|
||||
|
||||
case OPT_fd_lines_as_code:
|
||||
@@ -694,12 +693,7 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
|
||||
break;
|
||||
|
||||
case OPT_finit_local_zero:
|
||||
- gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON;
|
||||
- gfc_option.flag_init_integer_value = 0;
|
||||
- flag_init_real = GFC_INIT_REAL_ZERO;
|
||||
- gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE;
|
||||
- gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON;
|
||||
- gfc_option.flag_init_character_value = (char)0;
|
||||
+ set_init_local_zero (value);
|
||||
break;
|
||||
|
||||
case OPT_finit_logical_:
|
||||
@@ -798,12 +792,8 @@ gfc_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
|
||||
break;
|
||||
|
||||
case OPT_fdec:
|
||||
- /* Enable all DEC extensions. */
|
||||
- set_dec_flags (1);
|
||||
- break;
|
||||
-
|
||||
- case OPT_fdec_structure:
|
||||
- flag_dec_structure = 1;
|
||||
+ /* Set (or unset) the DEC extension flags. */
|
||||
+ set_dec_flags (value);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -895,3 +885,7 @@ gfc_get_option_string (void)
|
||||
result[--pos] = '\0';
|
||||
return result;
|
||||
}
|
||||
+
|
||||
+#undef SET_BITFLAG
|
||||
+#undef SET_BITFLAG2
|
||||
+#undef SET_FLAG
|
419
SOURCES/gcc8-fortran-pr87919.patch
Normal file
419
SOURCES/gcc8-fortran-pr87919.patch
Normal file
@ -0,0 +1,419 @@
|
||||
2018-12-03 Fritz Reese <fritzoreese@gmail.com>
|
||||
Mark Eggleston <mark.eggleston@codethink.co.uk>
|
||||
|
||||
PR fortran/87919
|
||||
* options.c (SET_FLAG, SET_BITFLAG, SET_BITFLAG2): New macros.
|
||||
(set_dec_flags): Set/unset DEC and std flags according to value.
|
||||
(set_init_local_zero): New helper for -finit-local-zero flag group.
|
||||
(gfc_init_options): Fix disabling of init flags, array temporaries
|
||||
check, and dec flags when value is zero (from -fno-*).
|
||||
|
||||
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
|
||||
index e59ba31ba7b..b35bed32974 100644
|
||||
--- a/gcc/fortran/options.c
|
||||
+++ b/gcc/fortran/options.c
|
||||
@@ -32,6 +32,20 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
gfc_option_t gfc_option;
|
||||
|
||||
+#define SET_FLAG(flag, condition, on_value, off_value) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ if (condition) \
|
||||
+ flag = (on_value); \
|
||||
+ else \
|
||||
+ flag = (off_value); \
|
||||
+ } while (0)
|
||||
+
|
||||
+#define SET_BITFLAG2(m) m
|
||||
+
|
||||
+#define SET_BITFLAG(flag, condition, value) \
|
||||
+ SET_BITFLAG2 (SET_FLAG (flag, condition, (flag | (value)), (flag & ~(value))))
|
||||
+
|
||||
|
||||
/* Set flags that control warnings and errors for different
|
||||
Fortran standards to their default values. Keep in sync with
|
||||
@@ -47,30 +61,55 @@ set_default_std_flags (void)
|
||||
gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
|
||||
}
|
||||
|
||||
-
|
||||
-/* Set all the DEC extension flags. */
|
||||
+/* Set (or unset) the DEC extension flags. */
|
||||
|
||||
static void
|
||||
set_dec_flags (int value)
|
||||
{
|
||||
+ /* Set (or unset) other DEC compatibility extensions. */
|
||||
+ SET_BITFLAG (flag_dollar_ok, value, value);
|
||||
+ SET_BITFLAG (flag_cray_pointer, value, value);
|
||||
+ SET_BITFLAG (flag_dec_structure, value, value);
|
||||
+ SET_BITFLAG (flag_dec_intrinsic_ints, value, value);
|
||||
+ SET_BITFLAG (flag_dec_static, value, value);
|
||||
+ SET_BITFLAG (flag_dec_math, value, value);
|
||||
+ SET_BITFLAG (flag_dec_include, value, value);
|
||||
+}
|
||||
+
|
||||
+/* Finalize DEC flags. */
|
||||
+
|
||||
+static void
|
||||
+post_dec_flags (int value)
|
||||
+{
|
||||
+ /* Don't warn for legacy code if -fdec is given; however, setting -fno-dec
|
||||
+ does not force these warnings. We make one final determination on this
|
||||
+ at the end because -std= is always set first; thus, we can avoid
|
||||
+ clobbering the user's desired standard settings in gfc_handle_option
|
||||
+ e.g. when -fdec and -fno-dec are both given. */
|
||||
if (value)
|
||||
{
|
||||
- /* Allow legacy code without warnings. */
|
||||
gfc_option.allow_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL
|
||||
- | GFC_STD_GNU | GFC_STD_LEGACY;
|
||||
+ | GFC_STD_GNU | GFC_STD_LEGACY;
|
||||
gfc_option.warn_std &= ~(GFC_STD_LEGACY | GFC_STD_F95_DEL);
|
||||
}
|
||||
-
|
||||
- /* Set other DEC compatibility extensions. */
|
||||
- flag_dollar_ok |= value;
|
||||
- flag_cray_pointer |= value;
|
||||
- flag_dec_structure |= value;
|
||||
- flag_dec_intrinsic_ints |= value;
|
||||
- flag_dec_static |= value;
|
||||
- flag_dec_math |= value;
|
||||
- flag_dec_include |= value;
|
||||
}
|
||||
|
||||
+/* Enable (or disable) -finit-local-zero. */
|
||||
+
|
||||
+static void
|
||||
+set_init_local_zero (int value)
|
||||
+{
|
||||
+ gfc_option.flag_init_integer_value = 0;
|
||||
+ gfc_option.flag_init_character_value = (char)0;
|
||||
+
|
||||
+ SET_FLAG (gfc_option.flag_init_integer, value, GFC_INIT_INTEGER_ON,
|
||||
+ GFC_INIT_INTEGER_OFF);
|
||||
+ SET_FLAG (gfc_option.flag_init_logical, value, GFC_INIT_LOGICAL_FALSE,
|
||||
+ GFC_INIT_LOGICAL_OFF);
|
||||
+ SET_FLAG (gfc_option.flag_init_character, value, GFC_INIT_CHARACTER_ON,
|
||||
+ GFC_INIT_CHARACTER_OFF);
|
||||
+ SET_FLAG (flag_init_real, value, GFC_INIT_REAL_ZERO, GFC_INIT_REAL_OFF);
|
||||
+}
|
||||
|
||||
/* Return language mask for Fortran options. */
|
||||
|
||||
diff --git a/gcc/testsuite/gfortran.dg/array_temporaries_5.f90 b/gcc/testsuite/gfortran.dg/array_temporaries_5.f90
|
||||
new file mode 100644
|
||||
index 00000000000..dd147ba38ed
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/array_temporaries_5.f90
|
||||
@@ -0,0 +1,10 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options "-fcheck-array-temporaries -fno-check-array-temporaries" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Ensure -fno-check-array-temporaries disables array temporary checking.
|
||||
+!
|
||||
+
|
||||
+! Note that 'include' drops the dg-output check from the original test case.
|
||||
+include 'array_temporaries_2.f90'
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90 b/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90
|
||||
new file mode 100644
|
||||
index 00000000000..c28cf81fc04
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_bitwise_ops_3.f90
|
||||
@@ -0,0 +1,29 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-std=legacy -fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Make sure -fno-dec disables bitwise ops and check for the right errors.
|
||||
+! -std=legacy is added to avoid the .XOR. extension warning.
|
||||
+!
|
||||
+
|
||||
+include 'dec_bitwise_ops_1.f90'
|
||||
+
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 33 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 34 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 35 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 46 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 47 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 48 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 59 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 60 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 61 }
|
||||
+! { dg-error "Operand of .not. operator" " " { target *-*-* } 72 }
|
||||
+! { dg-error "Operand of .not. operator" " " { target *-*-* } 73 }
|
||||
+! { dg-error "Operand of .not. operator" " " { target *-*-* } 74 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 85 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 86 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 87 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 98 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 99 }
|
||||
+! { dg-error "Operands of logical operator" " " { target *-*-* } 100 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_d_lines_3.f b/gcc/testsuite/gfortran.dg/dec_d_lines_3.f
|
||||
new file mode 100644
|
||||
index 00000000000..2df4341c0e4
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_d_lines_3.f
|
||||
@@ -0,0 +1,14 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-ffixed-form -fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Ensure -fno-dec disables -fdec, leaving d-lines as code by default.
|
||||
+!
|
||||
+
|
||||
+include 'dec_d_lines_2.f'
|
||||
+
|
||||
+! { dg-error "character in statement label" " " { target *-*-*} 6 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-*} 6 }
|
||||
+! { dg-error "character in statement label" " " { target *-*-*} 7 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-*} 7 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_exp_4.f90 b/gcc/testsuite/gfortran.dg/dec_exp_4.f90
|
||||
new file mode 100644
|
||||
index 00000000000..9d8b10db6a7
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_exp_4.f90
|
||||
@@ -0,0 +1,12 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Make sure -fno-dec disables -fdec as with dec_exp_2.
|
||||
+!
|
||||
+
|
||||
+include 'dec_exp_2.f90'
|
||||
+
|
||||
+! { dg-error "Missing exponent" "" { target *-*-* } 9 }
|
||||
+! { dg-error "Missing exponent" "" { target *-*-* } 11 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_exp_5.f90 b/gcc/testsuite/gfortran.dg/dec_exp_5.f90
|
||||
new file mode 100644
|
||||
index 00000000000..faf3a9b306b
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_exp_5.f90
|
||||
@@ -0,0 +1,11 @@
|
||||
+! { dg-do run "xfail *-*-*" }
|
||||
+! { dg-options "-fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Make sure -fno-dec disables -fdec as with dec_exp_3.
|
||||
+!
|
||||
+
|
||||
+include 'dec_exp_3.f90'
|
||||
+
|
||||
+! { XFAIL "Bad real number" "" { target *-*-* } 13 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_io_7.f90 b/gcc/testsuite/gfortran.dg/dec_io_7.f90
|
||||
new file mode 100644
|
||||
index 00000000000..4a931c15fe7
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_io_7.f90
|
||||
@@ -0,0 +1,20 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Make sure -fno-dec rejects -fdec I/O specifiers as with dec_io_1.
|
||||
+!
|
||||
+
|
||||
+include 'dec_io_1.f90'
|
||||
+
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 12 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 24 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 58 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 64 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 68 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 74 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 78 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 84 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 90 }
|
||||
+! { dg-error "is a DEC extension" "" { target *-*-* } 96 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_24.f90 b/gcc/testsuite/gfortran.dg/dec_structure_24.f90
|
||||
new file mode 100644
|
||||
index 00000000000..02842b315dc
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_structure_24.f90
|
||||
@@ -0,0 +1,32 @@
|
||||
+! { dg-do compile }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Should fail to compile without the -fdec or -fdec-structure options.
|
||||
+!
|
||||
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||
+
|
||||
+include 'dec_structure_1.f90'
|
||||
+
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 14 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 21 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 22 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 }
|
||||
+! { dg-error "is not a variable" " " { target *-*-* } 30 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 32 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 36 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 40 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 44 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 48 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 52 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 }
|
||||
+! { dg-error "function result" " " { target *-*-* } 29 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_25.f90 b/gcc/testsuite/gfortran.dg/dec_structure_25.f90
|
||||
new file mode 100644
|
||||
index 00000000000..a64d85a88a4
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_structure_25.f90
|
||||
@@ -0,0 +1,11 @@
|
||||
+! { dg-do run }
|
||||
+! { dg-options "-fdec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Should compile and run with the -fdec option.
|
||||
+!
|
||||
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||
+!
|
||||
+
|
||||
+include 'dec_structure_1.f90'
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_26.f90 b/gcc/testsuite/gfortran.dg/dec_structure_26.f90
|
||||
new file mode 100644
|
||||
index 00000000000..7829103b995
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_structure_26.f90
|
||||
@@ -0,0 +1,34 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec -fno-dec-structure" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Should fail to compile with -fdec and -fno-dec-structure.
|
||||
+!
|
||||
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||
+!
|
||||
+
|
||||
+include 'dec_structure_1.f90'
|
||||
+
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 14 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 21 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 22 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 }
|
||||
+! { dg-error "is not a variable" " " { target *-*-* } 30 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 32 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 36 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 40 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 44 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 48 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 52 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 }
|
||||
+! { dg-error "function result" " " { target *-*-* } 29 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_27.f90 b/gcc/testsuite/gfortran.dg/dec_structure_27.f90
|
||||
new file mode 100644
|
||||
index 00000000000..1257365deb8
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_structure_27.f90
|
||||
@@ -0,0 +1,34 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec-structure -fno-dec-structure" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Should fail to compile with -fdec-structure and -fno-dec-structure.
|
||||
+!
|
||||
+! Contributed by Mark Eggleston <mark.eggleston@codethink.com>
|
||||
+!
|
||||
+
|
||||
+include 'dec_structure_1.f90'
|
||||
+
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 14 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 19 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 21 }
|
||||
+! { dg-error "-fdec-structure" " " { target *-*-* } 22 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 25 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 26 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 27 }
|
||||
+! { dg-error "Unclassifiable statement" " " { target *-*-* } 28 }
|
||||
+! { dg-error "is not a variable" " " { target *-*-* } 30 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 32 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 34 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 36 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 38 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 40 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 42 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 44 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 46 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 48 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 50 }
|
||||
+! { dg-error "Bad character" " " { target *-*-* } 52 }
|
||||
+! { dg-error "Expecting END PROGRAM" " " { target *-*-* } 54 }
|
||||
+! { dg-error "function result" " " { target *-*-* } 29 }
|
||||
diff --git a/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90
|
||||
new file mode 100644
|
||||
index 00000000000..f766bdf0022
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90
|
||||
@@ -0,0 +1,21 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fdec -fno-dec" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Ensure that -fno-dec disables the usage of TYPE as an alias for PRINT.
|
||||
+!
|
||||
+
|
||||
+include 'dec_type_print.f90'
|
||||
+
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 52 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 53 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 54 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 55 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 56 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 57 }
|
||||
+! { dg-error "Invalid character in name" "" { target *-*-* } 58 }
|
||||
+! { dg-error "Unclassifiable statement" "" { target *-*-* } 59 }
|
||||
+! { dg-error "conflicts with PROCEDURE" "" { target *-*-* } 60 }
|
||||
+! { dg-error "Cannot assign to a named constant" "" { target *-*-* } 80 }
|
||||
+
|
||||
diff --git a/gcc/testsuite/gfortran.dg/init_flag_20.f90 b/gcc/testsuite/gfortran.dg/init_flag_20.f90
|
||||
new file mode 100644
|
||||
index 00000000000..6f15c1ace0d
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/init_flag_20.f90
|
||||
@@ -0,0 +1,15 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-fbackslash -finit-local-zero -fno-init-local-zero -fdump-tree-original" }
|
||||
+!
|
||||
+! PR fortran/87919
|
||||
+!
|
||||
+! Make sure -fno-init-local-zero disables -finit-local-zero.
|
||||
+!
|
||||
+
|
||||
+include 'init_flag_1.f90'
|
||||
+
|
||||
+! Make sure no initialization code is generated.
|
||||
+! { dg-final { scan-tree-dump-times "r\[1-4] *= *\[0\{]" 0 "original" } }
|
||||
+! { dg-final { scan-tree-dump-times "l\[12] *= *\[0\{]" 0 "original" } }
|
||||
+! { dg-final { scan-tree-dump-times "i\[1-4] *= *\[0\{]" 0 "original" } }
|
||||
+! { dg-final { scan-tree-dump-times "memmove *\[(]\[^,]*c\[1-4]" 0 "original" } }
|
36
SOURCES/gcc8-fortranlines.patch
Normal file
36
SOURCES/gcc8-fortranlines.patch
Normal file
@ -0,0 +1,36 @@
|
||||
diff -Nrup a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
|
||||
--- a/gcc/fortran/scanner.c 2017-03-08 12:35:48.000000000 -0500
|
||||
+++ b/gcc/fortran/scanner.c 2018-05-03 19:01:52.000000000 -0400
|
||||
@@ -2097,6 +2097,10 @@ preprocessor_line (gfc_char_t *c)
|
||||
in the linemap. Alternative could be using GC or updating linemap to
|
||||
point to the new name, but there is no API for that currently. */
|
||||
current_file->filename = xstrdup (filename);
|
||||
+
|
||||
+ /* We need to tell the linemap API that the filename changed. Just
|
||||
+ changing current_file is insufficient. */
|
||||
+ linemap_add (line_table, LC_RENAME, false, current_file->filename, line);
|
||||
}
|
||||
|
||||
/* Set new line number. */
|
||||
diff -Nrup a/gcc/testsuite/gfortran.dg/linefile.f90 b/gcc/testsuite/gfortran.dg/linefile.f90
|
||||
--- a/gcc/testsuite/gfortran.dg/linefile.f90 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ b/gcc/testsuite/gfortran.dg/linefile.f90 2018-05-07 13:34:22.000000000 -0400
|
||||
@@ -0,0 +1,18 @@
|
||||
+! { dg-do compile }
|
||||
+! { dg-options "-Wall" }
|
||||
+
|
||||
+! This will verify that the # <line> <file> directive later does not
|
||||
+! mess up the diagnostic on this line
|
||||
+SUBROUTINE s(dummy) ! { dg-warning "Unused" }
|
||||
+ INTEGER, INTENT(in) :: dummy
|
||||
+END SUBROUTINE
|
||||
+
|
||||
+# 12345 "foo-f"
|
||||
+SUBROUTINE s2(dummy)
|
||||
+ INTEGER, INTENT(in) :: dummy
|
||||
+END SUBROUTINE
|
||||
+! We want to check that the # directive changes the filename in the
|
||||
+! diagnostic. Nothing else really matters here. dg-regexp allows us
|
||||
+! to see the entire diagnostic. We just have to make sure to consume
|
||||
+! the entire message.
|
||||
+! { dg-regexp "foo-f\[^\n]*" }
|
27
SOURCES/gcc9-Wno-format-security.patch
Normal file
27
SOURCES/gcc9-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
|
||||
@@ -481,7 +481,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 $wf_opt])), [loose_warn])
|
||||
--- 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
|
49
SOURCES/gcc9-alt-compat-test.patch
Normal file
49
SOURCES/gcc9-alt-compat-test.patch
Normal file
@ -0,0 +1,49 @@
|
||||
--- gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:50:42.000000000 -0500
|
||||
+++ gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c 2011-02-18 06:28:53.858200077 -0500
|
||||
@@ -1501,6 +1501,8 @@ generate_random_tests (enum FEATURE feat
|
||||
int i, r;
|
||||
if (len > 'z' - 'a' + 1)
|
||||
abort ();
|
||||
+ if (getenv ("ALT_CXX_UNDER_TEST") != NULL)
|
||||
+ features &= ~FEATURE_VECTOR;
|
||||
memset (e, 0, sizeof (e));
|
||||
r = generate_random ();
|
||||
if ((r & 7) == 0)
|
||||
--- gcc/testsuite/g++.dg/compat/compat.exp.jj 2011-01-03 06:50:42.000000000 -0500
|
||||
+++ gcc/testsuite/g++.dg/compat/compat.exp 2011-02-18 06:30:54.248200398 -0500
|
||||
@@ -116,7 +116,12 @@ if [info exists ALT_CXX_UNDER_TEST] then
|
||||
}
|
||||
|
||||
# Main loop.
|
||||
-foreach src [lsort [find $srcdir/$subdir *_main.C]] {
|
||||
+set tests [lsort [find $srcdir/$subdir *_main.C]]
|
||||
+if { $use_alt != 0 } then {
|
||||
+ set tests [prune $tests $srcdir/$subdir/decimal/*]
|
||||
+}
|
||||
+
|
||||
+foreach src $tests {
|
||||
# If we're only testing specific files and this isn't one of them, skip it.
|
||||
if ![runtest_file_p $runtests $src] then {
|
||||
continue
|
||||
--- gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:49:58.000000000 -0500
|
||||
+++ gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c 2011-02-18 06:27:54.922262671 -0500
|
||||
@@ -1912,6 +1912,8 @@ generate_random_tests (enum FEATURE feat
|
||||
int i, r;
|
||||
if (len > 'z' - 'a' + 1)
|
||||
abort ();
|
||||
+ if (getenv ("ALT_CC_UNDER_TEST") != NULL)
|
||||
+ features &= ~FEATURE_VECTOR;
|
||||
memset (e, 0, sizeof (e));
|
||||
r = generate_random ();
|
||||
if ((r & 7) == 0)
|
||||
--- gcc/testsuite/lib/c-compat.exp.jj 2011-01-03 06:48:38.000000000 -0500
|
||||
+++ gcc/testsuite/lib/c-compat.exp 2011-02-18 06:38:19.124265008 -0500
|
||||
@@ -75,7 +75,7 @@ proc compat_setup_dfp { } {
|
||||
# If there is an alternate compiler, does it support decimal float types?
|
||||
if { $compat_have_dfp == 1 && $compat_use_alt == 1 && $compat_same_alt == 0 } {
|
||||
compat-use-alt-compiler
|
||||
- set compat_have_dfp [check_effective_target_dfprt_nocache]
|
||||
+ set compat_have_dfp 0
|
||||
compat-use-tst-compiler
|
||||
verbose "compat_have_dfp for alt compiler: $compat_have_dfp" 2
|
||||
}
|
20
SOURCES/gcc9-d-shared-libphobos.patch
Normal file
20
SOURCES/gcc9-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
|
||||
@@ -405,9 +405,9 @@ lang_specific_driver (cl_decoded_option
|
||||
/* Add `-lgphobos' if we haven't already done so. */
|
||||
if (phobos_library != PHOBOS_NOLINK && need_phobos)
|
||||
{
|
||||
- /* 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_DYNAMIC && static_link)
|
122
SOURCES/gcc9-foffload-default.patch
Normal file
122
SOURCES/gcc9-foffload-default.patch
Normal file
@ -0,0 +1,122 @@
|
||||
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
|
||||
@@ -290,6 +290,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. */
|
||||
|
||||
@@ -4457,7 +4461,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;
|
||||
+ }
|
||||
|
||||
if (output_file
|
||||
&& strcmp (output_file, "-") != 0
|
||||
@@ -7693,6 +7700,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"
|
||||
|
||||
enum lto_mode_d {
|
||||
LTO_MODE_NONE, /* Not doing LTO. */
|
||||
@@ -820,6 +821,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%>)\n",
|
||||
@@ -883,6 +890,7 @@ compile_images_for_offload_targets (unsi
|
||||
unsigned num_targets = parse_env_var (target_names, &names, NULL);
|
||||
|
||||
int next_name_entry = 0;
|
||||
+ bool hsa_seen = false;
|
||||
const char *compiler_path = getenv ("COMPILER_PATH");
|
||||
if (!compiler_path)
|
||||
goto out;
|
||||
@@ -895,18 +903,26 @@ compile_images_for_offload_targets (unsi
|
||||
/* HSA does not use LTO-like streaming and a different compiler, skip
|
||||
it. */
|
||||
if (strcmp (names[i], "hsa") == 0)
|
||||
- continue;
|
||||
+ {
|
||||
+ hsa_seen = true;
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
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[next_name_entry])
|
||||
- fatal_error (input_location,
|
||||
- "problem with building target image for %s\n", names[i]);
|
||||
+ continue;
|
||||
next_name_entry++;
|
||||
}
|
||||
|
||||
+ if (next_name_entry == 0 && !hsa_seen)
|
||||
+ {
|
||||
+ free (offload_names);
|
||||
+ offload_names = NULL;
|
||||
+ }
|
||||
+
|
||||
out:
|
||||
free_array_of_ptrs ((void **) names, num_targets);
|
||||
}
|
||||
--- 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,
|
126
SOURCES/gcc9-hack.patch
Normal file
126
SOURCES/gcc9-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
|
||||
@@ -788,16 +788,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"));
|
||||
}
|
||||
|
||||
result |= CPP_N_INTEGER;
|
11
SOURCES/gcc9-i386-libgomp.patch
Normal file
11
SOURCES/gcc9-i386-libgomp.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100
|
||||
+++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100
|
||||
@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then
|
||||
;;
|
||||
*)
|
||||
if test -z "$with_arch"; then
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
fi
|
||||
esac
|
||||
;;
|
715
SOURCES/gcc9-isl-dl.patch
Normal file
715
SOURCES/gcc9-isl-dl.patch
Normal file
@ -0,0 +1,715 @@
|
||||
--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
|
||||
+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
|
||||
@@ -1046,7 +1046,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)
|
||||
# Any system libraries needed just for GNAT.
|
||||
SYSLIBS = @GNAT_LIBEXC@
|
||||
@@ -2196,6 +2196,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
|
||||
@@ -39,6 +39,590 @@ along with GCC; see the file COPYING3.
|
||||
#include <isl/schedule_node.h>
|
||||
#include <isl/id.h>
|
||||
#include <isl/space.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;
|
||||
|
||||
@@ -461,5 +1045,6 @@ extern void build_scops (vec<scop_p> *);
|
||||
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/gcc9-isl-dl2.patch
Normal file
71
SOURCES/gcc9-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.13 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
|
||||
@@ -154,6 +154,8 @@ static bool no_backend;
|
||||
/* Length of line when printing switch values. */
|
||||
#define MAX_LINE 75
|
||||
|
||||
+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;
|
||||
@@ -2126,6 +2128,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
|
||||
@@ -60,11 +60,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;
|
584
SOURCES/gcc9-libgfortran-compat.patch
Normal file
584
SOURCES/gcc9-libgfortran-compat.patch
Normal file
@ -0,0 +1,584 @@
|
||||
--- libgfortran/Makefile.am.jj 2019-05-02 15:02:58.276261865 +0200
|
||||
+++ libgfortran/Makefile.am 2019-05-17 12:38:34.269861044 +0200
|
||||
@@ -37,6 +37,7 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdi
|
||||
$(lt_host_flags)
|
||||
|
||||
toolexeclib_LTLIBRARIES = libgfortran.la
|
||||
+noinst_LTLIBRARIES = libgfortran_nonshared80.la
|
||||
toolexeclib_DATA = libgfortran.spec
|
||||
libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
|
||||
libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
@@ -1036,6 +1037,85 @@ libgfortran_la_SOURCES = $(prereq_SRC)
|
||||
|
||||
endif
|
||||
|
||||
+$(patsubst %.c,%.lo,$(nonshared_generated_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/generated/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_generated_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/generated/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.lo,$(nonshared_intrinsics_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/intrinsics/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_intrinsics_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/intrinsics/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.lo,$(nonshared_runtime_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/runtime/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_runtime_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/runtime/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.f90,%.lo,$(nonshared_intrinsics_f90_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/intrinsics/%.f90
|
||||
+ $(LTPPFCCOMPILE) -c -o $@ $< -fallow-leading-underscore
|
||||
+
|
||||
+$(patsubst %.f90,%.o,$(nonshared_intrinsics_f90_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/intrinsics/%.f90
|
||||
+ $(PPFCCOMPILE) -c -o $@ $< -fallow-leading-underscore
|
||||
+
|
||||
+nonshared_runtime_C_SRC = \
|
||||
+nonshared-ISO_Fortran_binding.c
|
||||
+
|
||||
+nonshared_generated_C_SRC = \
|
||||
+nonshared-findloc0_i1.c \
|
||||
+nonshared-findloc0_i2.c \
|
||||
+nonshared-findloc0_i4.c \
|
||||
+nonshared-findloc0_i8.c \
|
||||
+nonshared-findloc0_i16.c \
|
||||
+nonshared-findloc0_r4.c \
|
||||
+nonshared-findloc0_r8.c \
|
||||
+nonshared-findloc0_r16.c \
|
||||
+nonshared-findloc0_c4.c \
|
||||
+nonshared-findloc0_c8.c \
|
||||
+nonshared-findloc0_c16.c \
|
||||
+nonshared-findloc0_s1.c \
|
||||
+nonshared-findloc0_s4.c \
|
||||
+nonshared-findloc1_i1.c \
|
||||
+nonshared-findloc1_i2.c \
|
||||
+nonshared-findloc1_i4.c \
|
||||
+nonshared-findloc1_i8.c \
|
||||
+nonshared-findloc1_i16.c \
|
||||
+nonshared-findloc1_r4.c \
|
||||
+nonshared-findloc1_r8.c \
|
||||
+nonshared-findloc1_r16.c \
|
||||
+nonshared-findloc1_c4.c \
|
||||
+nonshared-findloc1_c8.c \
|
||||
+nonshared-findloc1_c16.c \
|
||||
+nonshared-findloc1_s1.c \
|
||||
+nonshared-findloc1_s4.c \
|
||||
+nonshared-findloc2_s1.c \
|
||||
+nonshared-findloc2_s4.c
|
||||
+
|
||||
+nonshared_intrinsics_C_SRC = \
|
||||
+nonshared-is_contiguous.c
|
||||
+
|
||||
+nonshared_intrinsics_f90_SRC = \
|
||||
+nonshared-random_init.f90
|
||||
+
|
||||
+libgfortran_nonshared80_la_SOURCES = \
|
||||
+$(nonshared_runtime_C_SRC) \
|
||||
+$(nonshared_generated_C_SRC) \
|
||||
+$(nonshared_intrinsics_C_SRC) \
|
||||
+$(nonshared_intrinsics_f90_SRC) \
|
||||
+$(srcdir)/ieee/nonshared-ieee_arithmetic.c \
|
||||
+$(srcdir)/io/nonshared-transfer.c
|
||||
+
|
||||
I_M4_DEPS=m4/iparm.m4
|
||||
I_M4_DEPS0=$(I_M4_DEPS) m4/iforeach.m4
|
||||
I_M4_DEPS1=$(I_M4_DEPS) m4/ifunction.m4
|
||||
--- libgfortran/libgfortran.h.jj 2019-04-25 20:03:12.299973131 +0200
|
||||
+++ libgfortran/libgfortran.h 2019-05-17 11:11:16.944997078 +0200
|
||||
@@ -195,7 +195,7 @@ extern int __mingw_snprintf (char *, siz
|
||||
# define internal_proto(x) sym_rename(x, IPREFIX(x))
|
||||
#endif
|
||||
|
||||
-#if defined(HAVE_ATTRIBUTE_VISIBILITY) && defined(HAVE_ATTRIBUTE_ALIAS)
|
||||
+#if defined(HAVE_ATTRIBUTE_VISIBILITY) && defined(HAVE_ATTRIBUTE_ALIAS) && !defined(LIBGFORTRAN_NONSHARED)
|
||||
# define export_proto(x) sym_rename(x, PREFIX(x))
|
||||
# define export_proto_np(x) extern char swallow_semicolon
|
||||
# define iexport_proto(x) internal_proto(x)
|
||||
@@ -270,6 +270,10 @@ typedef GFC_UINTEGER_4 gfc_char4_t;
|
||||
simply equal to the kind parameter itself. */
|
||||
#define GFC_SIZE_OF_CHAR_KIND(kind) (kind)
|
||||
|
||||
+#ifdef LIBGFORTRAN_NONSHARED
|
||||
+#define big_endian (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||
+#endif
|
||||
+
|
||||
#define GFOR_POINTER_TO_L1(p, kind) \
|
||||
((__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ? 1: 0) * (kind - 1) + (GFC_LOGICAL_1 *)(p))
|
||||
|
||||
@@ -1769,4 +1773,63 @@ internal_proto(cshift1_16_c16);
|
||||
#define HAVE_GFC_UINTEGER_1 1
|
||||
#define HAVE_GFC_UINTEGER_4 1
|
||||
|
||||
+#ifdef LIBGFORTRAN_NONSHARED
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+
|
||||
+#define internal_malloc_size nonshared_internal_malloc_size
|
||||
+#define xmalloc nonshared_internal_xmalloc
|
||||
+#define xmallocarray nonshared_internal_xmallocarray
|
||||
+#define reshape_packed nonshared_reshape_packed
|
||||
+static inline __attribute__((__always_inline__, __unused__))
|
||||
+void *
|
||||
+internal_malloc_size (size_t size)
|
||||
+{
|
||||
+ void *p;
|
||||
+
|
||||
+ if (size == 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ p = (void *) malloc (size);
|
||||
+ if (p == NULL)
|
||||
+ os_error ("Memory allocation failed");
|
||||
+ return p;
|
||||
+}
|
||||
+
|
||||
+static inline __attribute__((__always_inline__, __unused__))
|
||||
+void *
|
||||
+xmalloc (size_t size)
|
||||
+{
|
||||
+ return internal_malloc_size (size ? size : 1);
|
||||
+}
|
||||
+
|
||||
+static inline __attribute__((__always_inline__, __unused__))
|
||||
+void *
|
||||
+xmallocarray (size_t nmemb, size_t size)
|
||||
+{
|
||||
+ if (!nmemb || !size)
|
||||
+ size = nmemb = 1;
|
||||
+ else if (__builtin_expect ((nmemb | size)
|
||||
+ >= (((size_t) 1) << (__CHAR_BIT__
|
||||
+ * sizeof (size_t) / 2)), 0)
|
||||
+ && nmemb > __SIZE_MAX__ / size)
|
||||
+ {
|
||||
+ errno = ENOMEM;
|
||||
+ os_error ("Integer overflow in xmallocarray");
|
||||
+ }
|
||||
+
|
||||
+ return internal_malloc_size (nmemb * size);
|
||||
+}
|
||||
+
|
||||
+static inline __attribute__((__always_inline__, __unused__))
|
||||
+#include "intrinsics/reshape_packed.c"
|
||||
+
|
||||
+struct no_bounds_check { int bounds_check; };
|
||||
+#define compile_options ((struct no_bounds_check) { .bounds_check = 0 })
|
||||
+
|
||||
+#define internal_error(x, y...) runtime_error (y)
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
#endif /* LIBGFOR_H */
|
||||
--- libgfortran/ieee/nonshared-ieee_arithmetic.c.jj 2019-05-17 11:53:19.151524852 +0200
|
||||
+++ libgfortran/ieee/nonshared-ieee_arithmetic.c 2019-05-17 12:05:44.160272463 +0200
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* Helper functions in C for IEEE modules
|
||||
+ Copyright (C) 2013-2019 Free Software Foundation, Inc.
|
||||
+ Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
+
|
||||
+This file is part of the GNU Fortran runtime library (libgfortran).
|
||||
+
|
||||
+Libgfortran is free software; you can redistribute it and/or
|
||||
+modify it under the terms of the GNU General Public
|
||||
+License as published by the Free Software Foundation; either
|
||||
+version 3 of the License, or (at your option) any later version.
|
||||
+
|
||||
+Libgfortran is distributed in the hope that it will be useful,
|
||||
+but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+GNU General Public License for more details.
|
||||
+
|
||||
+Under Section 7 of GPL version 3, you are granted additional
|
||||
+permissions described in the GCC Runtime Library Exception, version
|
||||
+3.1, as published by the Free Software Foundation.
|
||||
+
|
||||
+You should have received a copy of the GNU General Public License and
|
||||
+a copy of the GCC Runtime Library Exception along with this program;
|
||||
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
+<http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include "libgfortran.h"
|
||||
+
|
||||
+GFC_LOGICAL_4
|
||||
+__ieee_arithmetic_MOD_ieee_support_subnormal_4 (gfc_array_r4 *arg)
|
||||
+{
|
||||
+ (void) arg;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+GFC_LOGICAL_4
|
||||
+__ieee_arithmetic_MOD_ieee_support_subnormal_8 (gfc_array_r8 *arg)
|
||||
+{
|
||||
+ (void) arg;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+#ifdef HAVE_GFC_REAL_10
|
||||
+GFC_LOGICAL_4
|
||||
+__ieee_arithmetic_MOD_ieee_support_subnormal_10 (gfc_array_r10 *arg)
|
||||
+{
|
||||
+ (void) arg;
|
||||
+ return 1;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef HAVE_GFC_REAL_16
|
||||
+GFC_LOGICAL_4
|
||||
+__ieee_arithmetic_MOD_ieee_support_subnormal_16 (gfc_array_r16 *arg)
|
||||
+{
|
||||
+ (void) arg;
|
||||
+ return 1;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+GFC_LOGICAL_4
|
||||
+__ieee_arithmetic_MOD_ieee_support_subnormal_noarg (void)
|
||||
+{
|
||||
+ return 1;
|
||||
+}
|
||||
--- libgfortran/io/nonshared-transfer.c.jj 2019-05-17 12:18:32.538630920 +0200
|
||||
+++ libgfortran/io/nonshared-transfer.c 2019-05-17 12:18:59.216191976 +0200
|
||||
@@ -0,0 +1,42 @@
|
||||
+/* Copyright (C) 2002-2019 Free Software Foundation, Inc.
|
||||
+ Contributed by Andy Vaught
|
||||
+ Namelist transfer functions contributed by Paul Thomas
|
||||
+ F2003 I/O support contributed by Jerry DeLisle
|
||||
+
|
||||
+This file is part of the GNU Fortran runtime library (libgfortran).
|
||||
+
|
||||
+Libgfortran is free software; you can redistribute it and/or modify
|
||||
+it under the terms of the GNU General Public License as published by
|
||||
+the Free Software Foundation; either version 3, or (at your option)
|
||||
+any later version.
|
||||
+
|
||||
+Libgfortran is distributed in the hope that it will be useful,
|
||||
+but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+GNU General Public License for more details.
|
||||
+
|
||||
+Under Section 7 of GPL version 3, you are granted additional
|
||||
+permissions described in the GCC Runtime Library Exception, version
|
||||
+3.1, as published by the Free Software Foundation.
|
||||
+
|
||||
+You should have received a copy of the GNU General Public License and
|
||||
+a copy of the GCC Runtime Library Exception along with this program;
|
||||
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
+<http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+
|
||||
+/* transfer.c -- Top level handling of data transfer statements. */
|
||||
+
|
||||
+#include "io.h"
|
||||
+#include "fbuf.h"
|
||||
+#include "format.h"
|
||||
+#include "unix.h"
|
||||
+#include "async.h"
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+
|
||||
+void
|
||||
+st_wait_async (st_parameter_wait *wtp)
|
||||
+{
|
||||
+ (void) wtp;
|
||||
+}
|
||||
--- libgfortran/Makefile.in.jj 2019-05-02 15:02:58.304261418 +0200
|
||||
+++ libgfortran/Makefile.in 2019-05-17 12:38:53.273548433 +0200
|
||||
@@ -216,7 +216,8 @@ am__uninstall_files_from_dir = { \
|
||||
am__installdirs = "$(DESTDIR)$(cafexeclibdir)" \
|
||||
"$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(toolexeclibdir)" \
|
||||
"$(DESTDIR)$(gfor_cdir)" "$(DESTDIR)$(fincludedir)"
|
||||
-LTLIBRARIES = $(cafexeclib_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
|
||||
+LTLIBRARIES = $(cafexeclib_LTLIBRARIES) $(noinst_LTLIBRARIES) \
|
||||
+ $(toolexeclib_LTLIBRARIES)
|
||||
libcaf_single_la_LIBADD =
|
||||
am_libcaf_single_la_OBJECTS = single.lo
|
||||
libcaf_single_la_OBJECTS = $(am_libcaf_single_la_OBJECTS)
|
||||
@@ -463,6 +464,33 @@ am__objects_65 = $(am__objects_3) $(am__
|
||||
@onestep_FALSE@am_libgfortran_la_OBJECTS = $(am__objects_65)
|
||||
@onestep_TRUE@am_libgfortran_la_OBJECTS = libgfortran_c.lo
|
||||
libgfortran_la_OBJECTS = $(am_libgfortran_la_OBJECTS)
|
||||
+libgfortran_nonshared80_la_LIBADD =
|
||||
+am__objects_66 = nonshared-ISO_Fortran_binding.lo
|
||||
+am__objects_67 = nonshared-findloc0_i1.lo nonshared-findloc0_i2.lo \
|
||||
+ nonshared-findloc0_i4.lo nonshared-findloc0_i8.lo \
|
||||
+ nonshared-findloc0_i16.lo nonshared-findloc0_r4.lo \
|
||||
+ nonshared-findloc0_r8.lo nonshared-findloc0_r16.lo \
|
||||
+ nonshared-findloc0_c4.lo nonshared-findloc0_c8.lo \
|
||||
+ nonshared-findloc0_c16.lo nonshared-findloc0_s1.lo \
|
||||
+ nonshared-findloc0_s4.lo nonshared-findloc1_i1.lo \
|
||||
+ nonshared-findloc1_i2.lo nonshared-findloc1_i4.lo \
|
||||
+ nonshared-findloc1_i8.lo nonshared-findloc1_i16.lo \
|
||||
+ nonshared-findloc1_r4.lo nonshared-findloc1_r8.lo \
|
||||
+ nonshared-findloc1_r16.lo nonshared-findloc1_c4.lo \
|
||||
+ nonshared-findloc1_c8.lo nonshared-findloc1_c16.lo \
|
||||
+ nonshared-findloc1_s1.lo nonshared-findloc1_s4.lo \
|
||||
+ nonshared-findloc2_s1.lo nonshared-findloc2_s4.lo
|
||||
+am__objects_68 = nonshared-is_contiguous.lo
|
||||
+am__objects_69 = nonshared-random_init.lo
|
||||
+am_libgfortran_nonshared80_la_OBJECTS = $(am__objects_66) \
|
||||
+ $(am__objects_67) $(am__objects_68) $(am__objects_69) \
|
||||
+ nonshared-ieee_arithmetic.lo nonshared-transfer.lo
|
||||
+libgfortran_nonshared80_la_OBJECTS = \
|
||||
+ $(am_libgfortran_nonshared80_la_OBJECTS)
|
||||
+AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
+am__v_lt_0 = --silent
|
||||
+am__v_lt_1 =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
@@ -479,10 +507,6 @@ DEFAULT_INCLUDES = -I.@am__isrc@
|
||||
depcomp = $(SHELL) $(top_srcdir)/../depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
-AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
-am__v_lt_0 = --silent
|
||||
-am__v_lt_1 =
|
||||
PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
|
||||
LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
|
||||
@@ -526,7 +550,8 @@ AM_V_FC = $(am__v_FC_@AM_V@)
|
||||
am__v_FC_ = $(am__v_FC_@AM_DEFAULT_V@)
|
||||
am__v_FC_0 = @echo " FC " $@;
|
||||
am__v_FC_1 =
|
||||
-SOURCES = $(libcaf_single_la_SOURCES) $(libgfortran_la_SOURCES)
|
||||
+SOURCES = $(libcaf_single_la_SOURCES) $(libgfortran_la_SOURCES) \
|
||||
+ $(libgfortran_nonshared80_la_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
@@ -722,6 +747,7 @@ LTLDFLAGS = $(shell $(SHELL) $(top_srcdi
|
||||
$(lt_host_flags)
|
||||
|
||||
toolexeclib_LTLIBRARIES = libgfortran.la
|
||||
+noinst_LTLIBRARIES = libgfortran_nonshared80.la
|
||||
toolexeclib_DATA = libgfortran.spec
|
||||
libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
|
||||
libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
@@ -1547,6 +1573,53 @@ prereq_SRC = $(gfor_src) $(gfor_built_sr
|
||||
#libgfortran_F.lo:
|
||||
# $(LTPPFCCOMPILE) -c -o $@ $^ -combine
|
||||
@onestep_TRUE@libgfortran_la_SOURCES = libgfortran_c.c $(filter-out %.c,$(prereq_SRC))
|
||||
+nonshared_runtime_C_SRC = \
|
||||
+nonshared-ISO_Fortran_binding.c
|
||||
+
|
||||
+nonshared_generated_C_SRC = \
|
||||
+nonshared-findloc0_i1.c \
|
||||
+nonshared-findloc0_i2.c \
|
||||
+nonshared-findloc0_i4.c \
|
||||
+nonshared-findloc0_i8.c \
|
||||
+nonshared-findloc0_i16.c \
|
||||
+nonshared-findloc0_r4.c \
|
||||
+nonshared-findloc0_r8.c \
|
||||
+nonshared-findloc0_r16.c \
|
||||
+nonshared-findloc0_c4.c \
|
||||
+nonshared-findloc0_c8.c \
|
||||
+nonshared-findloc0_c16.c \
|
||||
+nonshared-findloc0_s1.c \
|
||||
+nonshared-findloc0_s4.c \
|
||||
+nonshared-findloc1_i1.c \
|
||||
+nonshared-findloc1_i2.c \
|
||||
+nonshared-findloc1_i4.c \
|
||||
+nonshared-findloc1_i8.c \
|
||||
+nonshared-findloc1_i16.c \
|
||||
+nonshared-findloc1_r4.c \
|
||||
+nonshared-findloc1_r8.c \
|
||||
+nonshared-findloc1_r16.c \
|
||||
+nonshared-findloc1_c4.c \
|
||||
+nonshared-findloc1_c8.c \
|
||||
+nonshared-findloc1_c16.c \
|
||||
+nonshared-findloc1_s1.c \
|
||||
+nonshared-findloc1_s4.c \
|
||||
+nonshared-findloc2_s1.c \
|
||||
+nonshared-findloc2_s4.c
|
||||
+
|
||||
+nonshared_intrinsics_C_SRC = \
|
||||
+nonshared-is_contiguous.c
|
||||
+
|
||||
+nonshared_intrinsics_f90_SRC = \
|
||||
+nonshared-random_init.f90
|
||||
+
|
||||
+libgfortran_nonshared80_la_SOURCES = \
|
||||
+$(nonshared_runtime_C_SRC) \
|
||||
+$(nonshared_generated_C_SRC) \
|
||||
+$(nonshared_intrinsics_C_SRC) \
|
||||
+$(nonshared_intrinsics_f90_SRC) \
|
||||
+$(srcdir)/ieee/nonshared-ieee_arithmetic.c \
|
||||
+$(srcdir)/io/nonshared-transfer.c
|
||||
+
|
||||
I_M4_DEPS = m4/iparm.m4
|
||||
I_M4_DEPS0 = $(I_M4_DEPS) m4/iforeach.m4
|
||||
I_M4_DEPS1 = $(I_M4_DEPS) m4/ifunction.m4
|
||||
@@ -1657,6 +1730,17 @@ clean-cafexeclibLTLIBRARIES:
|
||||
rm -f $${locs}; \
|
||||
}
|
||||
|
||||
+clean-noinstLTLIBRARIES:
|
||||
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
|
||||
+ @list='$(noinst_LTLIBRARIES)'; \
|
||||
+ locs=`for p in $$list; do echo $$p; done | \
|
||||
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
|
||||
+ sort -u`; \
|
||||
+ test -z "$$locs" || { \
|
||||
+ echo rm -f $${locs}; \
|
||||
+ rm -f $${locs}; \
|
||||
+ }
|
||||
+
|
||||
install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
|
||||
@@ -1698,6 +1782,9 @@ libcaf_single.la: $(libcaf_single_la_OBJ
|
||||
libgfortran.la: $(libgfortran_la_OBJECTS) $(libgfortran_la_DEPENDENCIES) $(EXTRA_libgfortran_la_DEPENDENCIES)
|
||||
$(AM_V_GEN)$(libgfortran_la_LINK) -rpath $(toolexeclibdir) $(libgfortran_la_OBJECTS) $(libgfortran_la_LIBADD) $(LIBS)
|
||||
|
||||
+libgfortran_nonshared80.la: $(libgfortran_nonshared80_la_OBJECTS) $(libgfortran_nonshared80_la_DEPENDENCIES) $(EXTRA_libgfortran_nonshared80_la_DEPENDENCIES)
|
||||
+ $(AM_V_FCLD)$(FCLINK) $(libgfortran_nonshared80_la_OBJECTS) $(libgfortran_nonshared80_la_LIBADD) $(LIBS)
|
||||
+
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
@@ -2110,6 +2197,38 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_r8.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_alloc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvbits.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-ISO_Fortran_binding.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_c16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_c4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_c8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_i1.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_i16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_i2.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_i4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_i8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_r16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_r4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_r8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_s1.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc0_s4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_c16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_c4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_c8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_i1.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_i16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_i2.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_i4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_i8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_r16.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_r4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_r8.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_s1.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc1_s4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc2_s1.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-findloc2_s4.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-ieee_arithmetic.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-is_contiguous.Plo@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonshared-transfer.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r10.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r16.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norm2_r4.Plo@am__quote@
|
||||
@@ -6628,6 +6747,20 @@ ieee_helper.lo: ieee/ieee_helper.c
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ieee_helper.lo `test -f 'ieee/ieee_helper.c' || echo '$(srcdir)/'`ieee/ieee_helper.c
|
||||
|
||||
+nonshared-ieee_arithmetic.lo: $(srcdir)/ieee/nonshared-ieee_arithmetic.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nonshared-ieee_arithmetic.lo -MD -MP -MF $(DEPDIR)/nonshared-ieee_arithmetic.Tpo -c -o nonshared-ieee_arithmetic.lo `test -f '$(srcdir)/ieee/nonshared-ieee_arithmetic.c' || echo '$(srcdir)/'`$(srcdir)/ieee/nonshared-ieee_arithmetic.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nonshared-ieee_arithmetic.Tpo $(DEPDIR)/nonshared-ieee_arithmetic.Plo
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/ieee/nonshared-ieee_arithmetic.c' object='nonshared-ieee_arithmetic.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nonshared-ieee_arithmetic.lo `test -f '$(srcdir)/ieee/nonshared-ieee_arithmetic.c' || echo '$(srcdir)/'`$(srcdir)/ieee/nonshared-ieee_arithmetic.c
|
||||
+
|
||||
+nonshared-transfer.lo: $(srcdir)/io/nonshared-transfer.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nonshared-transfer.lo -MD -MP -MF $(DEPDIR)/nonshared-transfer.Tpo -c -o nonshared-transfer.lo `test -f '$(srcdir)/io/nonshared-transfer.c' || echo '$(srcdir)/'`$(srcdir)/io/nonshared-transfer.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nonshared-transfer.Tpo $(DEPDIR)/nonshared-transfer.Plo
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/io/nonshared-transfer.c' object='nonshared-transfer.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nonshared-transfer.lo `test -f '$(srcdir)/io/nonshared-transfer.c' || echo '$(srcdir)/'`$(srcdir)/io/nonshared-transfer.c
|
||||
+
|
||||
.f90.o:
|
||||
$(AM_V_FC)$(FCCOMPILE) -c -o $@ $<
|
||||
|
||||
@@ -6822,7 +6955,8 @@ maintainer-clean-generic:
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-cafexeclibLTLIBRARIES clean-generic clean-libtool \
|
||||
- clean-local clean-toolexeclibLTLIBRARIES mostlyclean-am
|
||||
+ clean-local clean-noinstLTLIBRARIES \
|
||||
+ clean-toolexeclibLTLIBRARIES mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
@@ -6902,14 +7036,15 @@ uninstall-am: uninstall-cafexeclibLTLIBR
|
||||
.PHONY: CTAGS GTAGS TAGS all all-am all-local am--refresh check \
|
||||
check-am clean clean-cafexeclibLTLIBRARIES clean-cscope \
|
||||
clean-generic clean-libtool clean-local \
|
||||
- clean-toolexeclibLTLIBRARIES cscope cscopelist-am ctags \
|
||||
- ctags-am distclean distclean-compile distclean-generic \
|
||||
- distclean-hdr distclean-libtool distclean-local distclean-tags \
|
||||
- dvi dvi-am html html-am info info-am install install-am \
|
||||
- install-cafexeclibLTLIBRARIES install-data install-data-am \
|
||||
- install-dvi install-dvi-am install-exec install-exec-am \
|
||||
- install-exec-local install-gfor_cHEADERS install-html \
|
||||
- install-html-am install-info install-info-am install-man \
|
||||
+ clean-noinstLTLIBRARIES clean-toolexeclibLTLIBRARIES cscope \
|
||||
+ cscopelist-am ctags ctags-am distclean distclean-compile \
|
||||
+ distclean-generic distclean-hdr distclean-libtool \
|
||||
+ distclean-local distclean-tags dvi dvi-am html html-am info \
|
||||
+ info-am install install-am install-cafexeclibLTLIBRARIES \
|
||||
+ install-data install-data-am install-dvi install-dvi-am \
|
||||
+ install-exec install-exec-am install-exec-local \
|
||||
+ install-gfor_cHEADERS install-html install-html-am \
|
||||
+ install-info install-info-am install-man \
|
||||
install-nodist_fincludeHEADERS install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-strip install-toolexeclibDATA \
|
||||
install-toolexeclibLTLIBRARIES installcheck installcheck-am \
|
||||
@@ -6967,6 +7102,38 @@ ieee_arithmetic.mod: ieee_arithmetic.lo
|
||||
@onestep_TRUE@libgfortran_c.lo: $(filter %.c,$(prereq_SRC))
|
||||
@onestep_TRUE@ $(LTCOMPILE) -c -o $@ $^ -combine
|
||||
|
||||
+$(patsubst %.c,%.lo,$(nonshared_generated_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/generated/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_generated_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/generated/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.lo,$(nonshared_intrinsics_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/intrinsics/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_intrinsics_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/intrinsics/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.lo,$(nonshared_runtime_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/runtime/%.c
|
||||
+ $(LTCOMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.c,%.o,$(nonshared_runtime_C_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/runtime/%.c
|
||||
+ $(COMPILE) -c -o $@ $< -DLIBGFORTRAN_NONSHARED
|
||||
+
|
||||
+$(patsubst %.f90,%.lo,$(nonshared_intrinsics_f90_SRC) $(nonshared)): \
|
||||
+nonshared-%.lo: $(srcdir)/intrinsics/%.f90
|
||||
+ $(LTPPFCCOMPILE) -c -o $@ $< -fallow-leading-underscore
|
||||
+
|
||||
+$(patsubst %.f90,%.o,$(nonshared_intrinsics_f90_SRC) $(nonshared)): \
|
||||
+nonshared-%.o: $(srcdir)/intrinsics/%.f90
|
||||
+ $(PPFCCOMPILE) -c -o $@ $< -fallow-leading-underscore
|
||||
+
|
||||
kinds.h: $(srcdir)/mk-kinds-h.sh
|
||||
$(SHELL) $(srcdir)/mk-kinds-h.sh '$(FCCOMPILE)' > $@ || rm $@
|
||||
|
17
SOURCES/gcc9-libgomp-omp_h-multilib.patch
Normal file
17
SOURCES/gcc9-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
|
||||
|
12093
SOURCES/gcc9-libstdc++-compat.patch
Normal file
12093
SOURCES/gcc9-libstdc++-compat.patch
Normal file
File diff suppressed because it is too large
Load Diff
24
SOURCES/gcc9-libstdc++-docs.patch
Normal file
24
SOURCES/gcc9-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 9.1.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 9.1.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/gcc9-libtool-no-rpath.patch
Normal file
27
SOURCES/gcc9-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/gcc9-no-add-needed.patch
Normal file
37
SOURCES/gcc9-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 \
|
39
SOURCES/gcc9-pr90303.patch
Normal file
39
SOURCES/gcc9-pr90303.patch
Normal file
@ -0,0 +1,39 @@
|
||||
2019-05-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/90303
|
||||
* ipa-devirt.c (obj_type_ref_class, get_odr_type): Don't use
|
||||
TYPE_CANONICAL for TYPE_STRUCTURAL_EQUALITY_P types in !in_lto_p mode.
|
||||
|
||||
* g++.target/i386/pr90303.C: New test.
|
||||
|
||||
--- gcc/ipa-devirt.c (revision 270834)
|
||||
+++ gcc/ipa-devirt.c (revision 270835)
|
||||
@@ -2020,7 +2020,7 @@ obj_type_ref_class (const_tree ref)
|
||||
ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
|
||||
gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
|
||||
tree ret = TREE_TYPE (ref);
|
||||
- if (!in_lto_p)
|
||||
+ if (!in_lto_p && !TYPE_STRUCTURAL_EQUALITY_P (ret))
|
||||
ret = TYPE_CANONICAL (ret);
|
||||
else
|
||||
ret = get_odr_type (ret)->type;
|
||||
@@ -2042,7 +2042,7 @@ get_odr_type (tree type, bool insert)
|
||||
int base_id = -1;
|
||||
|
||||
type = TYPE_MAIN_VARIANT (type);
|
||||
- if (!in_lto_p)
|
||||
+ if (!in_lto_p && !TYPE_STRUCTURAL_EQUALITY_P (type))
|
||||
type = TYPE_CANONICAL (type);
|
||||
|
||||
gcc_checking_assert (can_be_name_hashed_p (type)
|
||||
--- gcc/testsuite/g++.target/i386/pr90303.C (nonexistent)
|
||||
+++ gcc/testsuite/g++.target/i386/pr90303.C (revision 270835)
|
||||
@@ -0,0 +1,8 @@
|
||||
+// PR tree-optimization/90303
|
||||
+// { dg-do compile { target ia32 } }
|
||||
+// { dg-additional-options "-O2" }
|
||||
+
|
||||
+struct A { virtual void foo (); };
|
||||
+template <class> class B : A {};
|
||||
+typedef void (__attribute__((fastcall)) F) ();
|
||||
+B<F> e;
|
31
SOURCES/gcc9-rh1574936.patch
Normal file
31
SOURCES/gcc9-rh1574936.patch
Normal file
@ -0,0 +1,31 @@
|
||||
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
|
||||
@@ -244,6 +244,7 @@
|
||||
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.
|
||||
@@ -297,6 +298,7 @@
|
||||
$(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)
|
||||
|
||||
# Extra flags to use when compiling crt{begin,end}.o.
|
||||
|
40
SOURCES/gcc9-sparc-config-detection.patch
Normal file
40
SOURCES/gcc9-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
|
2522
SPECS/gcc.spec
Normal file
2522
SPECS/gcc.spec
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user