sizeof(err),NULL, NULL))
{
if (where)
- gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at %L:"
- " %s", formal->name, &actual->where, err);
+ {
+ /* Artificially generated symbol names would only confuse. */
+ if (formal->attr.artificial)
+ gfc_error_opt (0, "Interface mismatch in dummy procedure "
+ "at %L conflicts with %L: %s", &actual->where,
+ &formal->declared_at, err);
+ else
+ gfc_error_opt (0, "Interface mismatch in dummy procedure %qs "
+ "at %L: %s", formal->name, &actual->where, err);
+ }
return false;
}
sizeof(err), NULL, NULL))
{
if (where)
- gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at %L:"
- " %s", formal->name, &actual->where, err);
+ {
+ if (formal->attr.artificial)
+ gfc_error_opt (0, "Interface mismatch in dummy procedure "
+ "at %L conflichts with %L: %s", &actual->where,
+ &formal->declared_at, err);
+ else
+ gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at "
+ "%L: %s", formal->name, &actual->where, err);
+
+ }
return false;
}
gfc_get_symbol (name, gfc_current_ns, &s);
if (a->expr->ts.type == BT_PROCEDURE)
{
+ gfc_symbol *asym = a->expr->symtree->n.sym;
s->attr.flavor = FL_PROCEDURE;
+ if (asym->attr.function)
+ {
+ s->attr.function = 1;
+ s->ts = asym->ts;
+ }
+ s->attr.subroutine = asym->attr.subroutine;
}
else
{
--- /dev/null
+ ! { dg-do compile }
+MODULE m
+ IMPLICIT NONE
+
+CONTAINS
+
+ SUBROUTINE test ()
+ IMPLICIT NONE
+
+ CALL bar (test2) ! { dg-error "Interface mismatch in dummy procedure" }
+ END SUBROUTINE test
+
+ INTEGER FUNCTION test2 () RESULT (x)
+ IMPLICIT NONE
+
+ CALL bar (test) ! { dg-error "Interface mismatch in dummy procedure" }
+ END FUNCTION test2
+
+END MODULE m
+
--- /dev/null
+! { dg-do compile }
+! PR 118845 - reduced from a segfault in Lapack.
+SUBROUTINE SDRVES( RESULT )
+ external SSLECT
+ CALL SGEES( SSLECT )
+ CALL SGEES( SSLECT )
+ RESULT = SSLECT( 1, 2 )
+END
IMPLICIT NONE
PROCEDURE(test2), POINTER :: procptr
- CALL bar (test2) ! { dg-warning "Non-RECURSIVE" }
+ CALL bar2 (test2) ! { dg-warning "Non-RECURSIVE" }
procptr => test2 ! { dg-warning "Non-RECURSIVE" }
x = 1812
bar = test_func () ! { dg-error "not RECURSIVE" }
procptr => test_func ! { dg-warning "Non-RECURSIVE" }
- CALL foobar (test_func) ! { dg-warning "Non-RECURSIVE" }
+ CALL foobar2 (test_func) ! { dg-warning "Non-RECURSIVE" }
END FUNCTION bar
END FUNCTION test_func
! { dg-do compile }
-! This is the list of intrinsics allowed as actual arguments
+ ! This is the list of intrinsics allowed as actual arguments
+ implicit none
intrinsic abs,acos,acosh,aimag,aint,alog,alog10,amod,anint,asin,asinh,atan,&
atan2,atanh,cabs,ccos,cexp,clog,conjg,cos,cosh,csin,csqrt,dabs,dacos,&
dacosh,dasin,dasinh,datan,datan2,datanh,dconjg,dcos,dcosh,ddim,dexp,dim,&
exp,iabs,idim,idnint,index,isign,len,mod,nint,sign,sin,sinh,sqrt,tan,&
tanh,zabs,zcos,zexp,zlog,zsin,zsqrt
- call foo(abs)
- call foo(acos)
- call foo(acosh)
- call foo(aimag)
- call foo(aint)
- call foo(alog)
- call foo(alog10)
- call foo(amod)
- call foo(anint)
- call foo(asin)
- call foo(asinh)
- call foo(atan)
- call foo(atan2)
- call foo(atanh)
- call foo(cabs)
- call foo(ccos)
- call foo(cexp)
- call foo(clog)
- call foo(conjg)
- call foo(cos)
- call foo(cosh)
- call foo(csin)
- call foo(csqrt)
- call foo(dabs)
- call foo(dacos)
- call foo(dacosh)
- call foo(dasin)
- call foo(dasinh)
- call foo(datan)
- call foo(datan2)
- call foo(datanh)
- call foo(dconjg)
- call foo(dcos)
- call foo(dcosh)
- call foo(ddim)
- call foo(dexp)
- call foo(dim)
- call foo(dimag)
- call foo(dint)
- call foo(dlog)
- call foo(dlog10)
- call foo(dmod)
- call foo(dnint)
- call foo(dprod)
- call foo(dsign)
- call foo(dsin)
- call foo(dsinh)
- call foo(dsqrt)
- call foo(dtan)
- call foo(dtanh)
- call foo(exp)
- call foo(iabs)
- call foo(idim)
- call foo(idnint)
- call foo(index)
- call foo(isign)
- call foo(len)
- call foo(mod)
- call foo(nint)
- call foo(sign)
- call foo(sin)
- call foo(sinh)
- call foo(sqrt)
- call foo(tan)
- call foo(tanh)
- call foo(zabs)
- call foo(zcos)
- call foo(zexp)
- call foo(zlog)
- call foo(zsin)
- call foo(zsqrt)
+ call foo_r4(abs)
+ call foo_r4(acos)
+ call foo_r4(acosh)
+ call foo_r4(aimag)
+ call foo_r4(aint)
+ call foo_r4(alog)
+ call foo_r4(alog10)
+ call foo_r4(amod)
+ call foo_r4(anint)
+ call foo_r4(asin)
+ call foo_r4(asinh)
+ call foo_r4(atan)
+ call foo_r4(atan2)
+ call foo_r4(atanh)
+ call foo_r4(cabs)
+ call foo_c4(ccos)
+ call foo_c4(cexp)
+ call foo_c4(clog)
+ call foo_c4(conjg)
+ call foo_r4(cos)
+ call foo_r4(cosh)
+ call foo_c4(csin)
+ call foo_c4(csqrt)
+ call foo_r8(dabs)
+ call foo_r8(dacos)
+ call foo_r8(dacosh)
+ call foo_r8(dasin)
+ call foo_r8(dasinh)
+ call foo_r8(datan)
+ call foo_r8(datan2)
+ call foo_r8(datanh)
+ call foo_c8(dconjg)
+ call foo_r8(dcos)
+ call foo_r8(dcosh)
+ call foo_r8(ddim)
+ call foo_r8(dexp)
+ call foo_r8(ddim)
+ call foo_r8(dimag)
+ call foo_r8(dint)
+ call foo_r8(dlog)
+ call foo_r8(dlog10)
+ call foo_r8(dmod)
+ call foo_r8(dnint)
+ call foo_r8(dprod)
+ call foo_r8(dsign)
+ call foo_r8(dsin)
+ call foo_r8(dsinh)
+ call foo_r8(dsqrt)
+ call foo_r8(dtan)
+ call foo_r8(dtanh)
+ call foo_r5(exp)
+ call foo_i4(iabs)
+ call foo_i4(idim)
+ call foo_i4(idnint)
+ call foo_i4(index)
+ call foo_i4(isign)
+ call foo_i4(len)
+ call foo_i4(mod)
+ call foo_i4(nint)
+ call foo_r4(sign)
+ call foo_r4(sin)
+ call foo_r4(sinh)
+ call foo_r4(sqrt)
+ call foo_r4(tan)
+ call foo_r4(tanh)
+ call foo_r8(zabs)
+ call foo_c8(zcos)
+ call foo_c8(zexp)
+ call foo_c8(zlog)
+ call foo_c8(zsin)
+ call foo_c8(zsqrt)
end