Modify checks to avoid referencing NULL pointer.
Update test cases with error messages that changed as a result. gcc/fortran/ChangeLog: PR fortran/102595 * decl.cc (attr_decl1): Guard against NULL pointer. * parse.cc (match_deferred_characteristics): Include BT_CLASS in check for derived being undefined. gcc/testsuite/ChangeLog: PR fortran/102595 * gfortran.dg/class_result_4.f90: Update error message check. * gfortran.dg/pr85779_3.f90: Update error message check.
This commit is contained in:
parent
bbab9c83f2
commit
cdc6bf44ee
4 changed files with 7 additions and 5 deletions
|
@ -8743,7 +8743,9 @@ attr_decl1 (void)
|
|||
/* Update symbol table. DIMENSION attribute is set in
|
||||
gfc_set_array_spec(). For CLASS variables, this must be applied
|
||||
to the first component, or '_data' field. */
|
||||
if (sym->ts.type == BT_CLASS && sym->ts.u.derived->attr.is_class)
|
||||
if (sym->ts.type == BT_CLASS
|
||||
&& sym->ts.u.derived
|
||||
&& sym->ts.u.derived->attr.is_class)
|
||||
{
|
||||
/* gfc_set_array_spec sets sym->attr not CLASS_DATA(sym)->attr. Check
|
||||
for duplicate attribute here. */
|
||||
|
|
|
@ -3934,7 +3934,7 @@ match_deferred_characteristics (gfc_typespec * ts)
|
|||
m = gfc_match_prefix (ts);
|
||||
gfc_buffer_error (false);
|
||||
|
||||
if (ts->type == BT_DERIVED)
|
||||
if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
|
||||
{
|
||||
ts->kind = 0;
|
||||
|
||||
|
@ -4215,7 +4215,7 @@ declSt:
|
|||
if (bad_characteristic)
|
||||
{
|
||||
ts = &gfc_current_block ()->result->ts;
|
||||
if (ts->type != BT_DERIVED)
|
||||
if (ts->type != BT_DERIVED && ts->type != BT_CLASS)
|
||||
gfc_error ("Bad kind expression for function %qs at %L",
|
||||
gfc_current_block ()->name,
|
||||
&gfc_current_block ()->declared_at);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! { dg-do compile }
|
||||
! PR fortran/78500
|
||||
class(t) function f() ! { dg-error "must be dummy, allocatable or pointer" }
|
||||
class(t) function f() ! { dg-error "is not accessible" }
|
||||
f = 1 ! { dg-error "variable must not be polymorphic" }
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! { dg-do compile }
|
||||
! PR fortran/85779
|
||||
class(t) function f() ! { dg-error "must be dummy, allocatable or pointer" }
|
||||
class(t) function f() ! { dg-error "is not accessible" }
|
||||
type f ! { dg-error "already has a basic type" }
|
||||
end type ! { dg-error "END FUNCTION statement" }
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue