Hi! As mentioned in the PR, for the case where the allocatable being privatized is "not currently allocated", we only clear the data pointer and in code where the user guarantees in the caller that the original variable is always allocated, this can result in false positive -Wmaybe-uninitialized warnings.
Worked around following way, bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk. 2019-03-11 Jakub Jelinek <ja...@redhat.com> PR fortran/89651 * trans-openmp.c (gfc_omp_clause_default_ctor): Set TREE_NO_WARNING on decl if adding COND_EXPR for allocatable. (gfc_omp_clause_copy_ctor): Set TREE_NO_WARNING on dest. * gfortran.dg/gomp/pr89651.f90: New test. --- gcc/fortran/trans-openmp.c.jj 2019-01-16 09:35:08.633255760 +0100 +++ gcc/fortran/trans-openmp.c 2019-03-11 18:09:32.297245296 +0100 @@ -558,6 +558,9 @@ gfc_omp_clause_default_ctor (tree clause build3_loc (input_location, COND_EXPR, void_type_node, cond, then_b, else_b)); + /* Avoid -W*uninitialized warnings. */ + if (DECL_P (decl)) + TREE_NO_WARNING (decl) = 1; } else gfc_add_expr_to_block (&block, then_b); @@ -664,6 +667,9 @@ gfc_omp_clause_copy_ctor (tree clause, t gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR, void_type_node, cond, then_b, else_b)); + /* Avoid -W*uninitialized warnings. */ + if (DECL_P (dest)) + TREE_NO_WARNING (dest) = 1; return gfc_finish_block (&block); } --- gcc/testsuite/gfortran.dg/gomp/pr89651.f90.jj 2019-03-11 18:05:37.740066305 +0100 +++ gcc/testsuite/gfortran.dg/gomp/pr89651.f90 2019-03-11 18:07:06.813615269 +0100 @@ -0,0 +1,21 @@ +! PR fortran/89651 +! { dg-do compile } +! { dg-additional-options "-Wuninitialized" } + +program pr89651 + integer :: n + real, allocatable :: t(:) + n = 10 + allocate (t(n), source = 0.0) +!$omp parallel firstprivate(t) + print *, sum (t) ! { dg-bogus "lbound' may be used uninitialized in this function" } + ! { dg-bogus "ubound' may be used uninitialized in this function" "" { target *-*-* } .-1 } + ! { dg-bogus "offset' may be used uninitialized in this function" "" { target *-*-* } .-2 } +!$omp end parallel +!$omp parallel private(t) + t = 0.0 + print *, sum (t) ! { dg-bogus "lbound' may be used uninitialized in this function" } + ! { dg-bogus "ubound' may be used uninitialized in this function" "" { target *-*-* } .-1 } + ! { dg-bogus "offset' may be used uninitialized in this function" "" { target *-*-* } .-2 } +!$omp end parallel +end program pr89651 Jakub