As complained by Coverity, which was pointed out to my by Fredering (thanks!), that patch lead to an inconsistency:
+ if (code->ext.omp_clauses) + resolve_omp_clauses (code, code->ext.omp_clauses, NULL); + if (!code->ext.omp_clauses->critical_name Before, we had: !$omp critical [(name) [hint()]] but as for hint == 0 '(name)' is not required, we now have: !$omp critical [(name)] [hint()] Result: gfc_match_omp_clauses is now called unconditionally and (unless MATCH_ERROR) it always allocates 'ext.omp_clauses'. Thus, we can now remove first condition – which caused that Coverity's scanner assumed that the second condition could dereference a NULL pointer in the 'false' case. Committed as obvious. Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
commit 20d0d6527c36005a9664f7ac9eb50f1071d5670c Author: Tobias Burnus <tob...@codesourcery.com> Date: Mon Jul 27 09:12:15 2020 +0200 fortran/openmp.c - silence static analyzer warning gcc/fortran/ChangeLog: * openmp.c (gfc_resolve_omp_directive): Remove NULL check for clauses in EXEC_OMP_CRITICAL as it no longer can be NULL. diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index f8f2439b6e4..4a0466f968d 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -6560,8 +6560,7 @@ gfc_resolve_omp_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED) resolve_omp_atomic (code); break; case EXEC_OMP_CRITICAL: - if (code->ext.omp_clauses) - resolve_omp_clauses (code, code->ext.omp_clauses, NULL); + resolve_omp_clauses (code, code->ext.omp_clauses, NULL); if (!code->ext.omp_clauses->critical_name && code->ext.omp_clauses->hint && code->ext.omp_clauses->hint->ts.type == BT_INTEGER