mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-31 15:31:11 +08:00
re PR fortran/86111 (ICE in gfc_arith_concat, at fortran/arith.c:985)
2018-10-06 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/86111 * gfortran.h (enum arith): Add ARITH_WRONGCONCAT. * arith.h (gfc_arith_error): Issue error for ARITH_WRONGCONCAT. (gfc_arith_concat): If the types of op1 and op2 are not character of if their kinds do not match, issue ARITH_WRONGCONCAT. 2018-10-06 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/86111 * gfortran.dg/array_constructor_type_23.f90: New test. From-SVN: r264900
This commit is contained in:
parent
2b03b800d8
commit
7318fdcaaa
@ -1,6 +1,14 @@
|
||||
2018-10-06 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/86111
|
||||
* gfortran.h (enum arith): Add ARITH_WRONGCONCAT.
|
||||
* arith.h (gfc_arith_error): Issue error for ARITH_WRONGCONCAT.
|
||||
(gfc_arith_concat): If the types of op1 and op2 are not
|
||||
character of if their kinds do not match, issue ARITH_WRONGCONCAT.
|
||||
|
||||
2018-10-06 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
Backport from trunk
|
||||
PR fortran/83999
|
||||
* resolve.c (resolve_fl_procedure): Include class functions in
|
||||
the test that elemental function results be scalar.
|
||||
|
||||
|
@ -113,6 +113,11 @@ gfc_arith_error (arith code)
|
||||
p =
|
||||
_("Integer outside symmetric range implied by Standard Fortran at %L");
|
||||
break;
|
||||
case ARITH_WRONGCONCAT:
|
||||
p =
|
||||
_("Illegal type in character concatenation at %L");
|
||||
break;
|
||||
|
||||
default:
|
||||
gfc_internal_error ("gfc_arith_error(): Bad error code");
|
||||
}
|
||||
@ -982,7 +987,12 @@ gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
|
||||
gfc_expr *result;
|
||||
size_t len;
|
||||
|
||||
gcc_assert (op1->ts.kind == op2->ts.kind);
|
||||
/* By cleverly playing around with constructors, is is possible
|
||||
to get mismaching types here. */
|
||||
if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER
|
||||
|| op1->ts.kind != op2->ts.kind)
|
||||
return ARITH_WRONGCONCAT;
|
||||
|
||||
result = gfc_get_constant_expr (BT_CHARACTER, op1->ts.kind,
|
||||
&op1->where);
|
||||
|
||||
|
@ -191,7 +191,8 @@ enum gfc_intrinsic_op
|
||||
/* Arithmetic results. */
|
||||
enum arith
|
||||
{ ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN,
|
||||
ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC, ARITH_PROHIBIT
|
||||
ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC, ARITH_PROHIBIT,
|
||||
ARITH_WRONGCONCAT
|
||||
};
|
||||
|
||||
/* Statements. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-10-06 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/86111
|
||||
* gfortran.dg/array_constructor_type_23.f90: New test.
|
||||
|
||||
2018-10-06 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/83999
|
||||
|
7
gcc/testsuite/gfortran.dg/array_constructor_type_23.f90
Normal file
7
gcc/testsuite/gfortran.dg/array_constructor_type_23.f90
Normal file
@ -0,0 +1,7 @@
|
||||
! { dg-do compile }
|
||||
! PR 83999 - this used to ICE
|
||||
! Origial test case by Gerhard Steinmetz
|
||||
|
||||
program p
|
||||
character(2) :: c = 'a' // [character :: [1]] ! { dg-error "Illegal type in character concatenation" }
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user