gfc_expr_set_at (e, &e->where, VALUE_VARDEF);
}
+ else
+ gfc_value_used_expr (e, VALUE_USED);
}
if (e->rank && e->ts.type != BT_CHARACTER)
return;
}
+ if (dt && (dt->dt_io_kind->value.iokind == M_WRITE
+ || dt->dt_io_kind->value.iokind == M_PRINT))
+ gfc_value_used_expr (exp, VALUE_USED);
+
if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
&& exp->expr_type != EXPR_FUNCTION
&& exp->expr_type != EXPR_ARRAY
return;
}
- if (dt && (dt->dt_io_kind->value.iokind == M_WRITE
- || dt->dt_io_kind->value.iokind == M_PRINT))
- gfc_value_used_expr (exp, VALUE_USED);
-
}
if (warn_unused_but_set_variable || warn_unused_intent_out
|| warn_unused_read || warn_undefined_vars)
- warn_unused_vs_set (ns);
+ {
+ int error_count;
+ gfc_get_errors (NULL, &error_count);
+ if (error_count == 0)
+ warn_unused_vs_set (ns);
+ }
if (ns->omp_assumes)
gfc_resolve_omp_assumptions (ns->omp_assumes);
--- /dev/null
+! { dg-do compile }
+! { dg-options "-Wundefined-vars -Wunused-but-set-variable" }
+! Make sure that no warning are emitted after an error.
+program main
+ real :: a, b
+ b = sum(a) ! { dg-error "must be an array" }
+end program main
+
--- /dev/null
+! { dg-do compile }
+! { dg-options "-Wunused-intent-out" }
+! PR fortran/125801 - no warnings should be emitted here.
+
+subroutine unused_1
+ character(len=20) c_val
+ integer val
+
+ CALL getarg(1,c_val)
+ READ(c_val,*) val
+ print*,val
+end subroutine unused_1
+
+subroutine unused_2
+
+ INTEGER t1,t2
+ CALL SYSTEM_CLOCK(t1)
+ CALL sleep(1)
+ CALL SYSTEM_CLOCK(t2)
+ print*,"Ende: ",(t2-t1)/1000.0
+end subroutine unused_2