It may be assigned an Hollerith constant. */
if (e->ts.type != BT_CHARACTER)
{
+ if (e->ts.type == BT_DERIVED || e->ts.type == BT_CLASS
+ || e->ts.type == BT_VOID)
+ {
+ gfc_error ("Non-character non-Hollerith in FORMAT tag at %L",
+ &e->where);
+ return false;
+ }
if (!gfc_notify_std (GFC_STD_LEGACY, "Non-character in FORMAT tag "
"at %L", &e->where))
return false;
--- /dev/null
+! { dg-do compile }
+!
+! PR fortran/99111
+!
+program p
+ use iso_c_binding
+ implicit none
+ type t
+ integer :: a(1)
+ end type
+ type(t), parameter :: x(3) = [t(transfer('("he', 1)), &
+ t(transfer('llo ', 1)), &
+ t(transfer('W1")', 1))]
+ type t2
+ procedure(), pointer, nopass :: ppt
+ end type t2
+ type(t2) :: ppcomp(1)
+ interface
+ function fptr()
+ procedure(), pointer :: fptr
+ end function
+ end interface
+ class(t), allocatable :: cl(:)
+ type(c_ptr) :: cptr(1)
+ type(c_funptr) :: cfunptr(1)
+ procedure(), pointer :: proc
+ external proc2
+
+ print x ! { dg-error "Non-character non-Hollerith in FORMAT tag" }
+ print cl ! { dg-error "Non-character non-Hollerith in FORMAT tag" }
+ print cptr ! { dg-error "Non-character non-Hollerith in FORMAT tag" }
+ print cfunptr ! { dg-error "Non-character non-Hollerith in FORMAT tag" }
+
+ print proc ! { dg-error "Syntax error in PRINT statement" }
+ print proc2 ! { dg-error "Syntax error in PRINT statement" }
+ print ppcomp%ppt ! { dg-error "Syntax error in PRINT statement" }
+
+ print fptr() ! { dg-error "must be of type default-kind CHARACTER or of INTEGER" }
+
+ call bar(1)
+contains
+ subroutine bar (xx)
+ type(*) :: xx
+ print xx ! { dg-error "Assumed-type variable xx at ... may only be used as actual argument" }
+ end
+end
--- /dev/null
+! { dg-do run }
+!
+! PR fortran/99111
+!
+program p
+ implicit none
+ type t
+ integer :: a(1)
+ end type
+ type(t), parameter :: x(3) = [t(transfer('("he', 1)), &
+ t(transfer('llo ', 1)), &
+ t(transfer('W1")', 1))]
+
+ integer, parameter :: y(3) = transfer('("hello W2")', 1, size=3)
+ real, parameter :: z(3) = transfer('("hello W3")', 1.0, size=3)
+
+ print y ! { dg-warning "Legacy Extension: Non-character in FORMAT" }
+ print z ! { dg-warning "Legacy Extension: Non-character in FORMAT" }
+ print x%a(1) ! { dg-warning "Legacy Extension: Non-character in FORMAT" }
+end
+
+! { dg-output "hello W2(\n|\r\n|\r)hello W3(\n|\r\n|\r)hello W1" }