https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72741
--- Comment #4 from cesar at gcc dot gnu.org --- I could be mistaken, but I don't think there's anything we can do about that test case because fortran doesn't have file scope. Specifically, in your example, SUBROUTINE r_w IMPLICIT NONE INTEGER :: i !$ACC ROUTINE WORKER !$ACC LOOP DO i = 1, 12345 END DO END SUBROUTINE r_w PROGRAM main IMPLICIT NONE EXTERNAL :: r_w !$ACC ROUTINE (r_w) GANG !$ACC PARALLEL CALL r_w !$ACC END PARALLEL END PROGRAM main from program main's perspective, r_w should be an acc routine with a gang attribute, but that's only because the end user included an explicit 'external' function declaration. I'm not sure how to catch mismatched function declarations in fortran, especially if lto is not enabled. If lto is enabled, we could add some more checking in pass oacc_device_lower. But I don't think there's anything else to do in the fortran front end. It should be noted that if the user wants to avoid these types of problems, acc routines should be placed inside modules. That way, each procedure sees the same acc routine attributes.