public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/98408] New: Character lengths for allocatable character arrays
@ 2020-12-21  8:35 tkoenig at gcc dot gnu.org
  2020-12-21 10:33 ` [Bug fortran/98408] " pault at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: tkoenig at gcc dot gnu.org @ 2020-12-21  8:35 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

            Bug ID: 98408
           Summary: Character lengths for allocatable character arrays
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkoenig at gcc dot gnu.org
  Target Milestone: ---

Consider

program main
  character (len=:), allocatable :: a(:)
  allocate (character(len=10) :: a(5))
end program main

This yields (in the tree dump)

  D.3941 = (bitsizetype) (sizetype) NON_LVALUE_EXPR <.a> * 8;
  D.3942 = (sizetype) NON_LVALUE_EXPR <.a>;
  a.data = 0B;
  {
    integer(kind=4) overflow.0;
    logical(kind=4) not_prev_allocated.1;

    .a = 10;

And later, if you use

size_in_bytes (gfc_get_element_type (TREE_TYPE(se->expr)))

you get an undefined variable.

Strange...

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/98408] Character lengths for allocatable character arrays
  2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
@ 2020-12-21 10:33 ` pault at gcc dot gnu.org
  2021-02-14 12:16 ` dominiq at lps dot ens.fr
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: pault at gcc dot gnu.org @ 2020-12-21 10:33 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

Paul Thomas <pault at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pault at gcc dot gnu.org

--- Comment #1 from Paul Thomas <pault at gcc dot gnu.org> ---
Hi Thomas,

>From gfc_conv_intrinsic_sizeof:

      if (arg->ts.type == BT_CHARACTER)
        byte_size = size_of_string_in_bytes (arg->ts.kind,
argse.string_length);
      else
        {
          if (arg->rank == 0)
            byte_size = TREE_TYPE (build_fold_indirect_ref_loc (input_location,
                                                                argse.expr));
          else
            byte_size = gfc_get_element_type (TREE_TYPE (argse.expr));
          byte_size = fold_convert (gfc_array_index_type,
                                    size_in_bytes (byte_size));
        }
    }

ie. characters are treated separately.

The problem is that gfc_get_element_type will come back with void* (or perhaps
void if TYPE_STRING_FLAG is not set) because of the cast in the allocation:
            a.data = (void * restrict) __builtin_malloc (50);

which is what GFC_TYPE_ARRAY_DATAPTR_TYPE is coming back with.

I think that you will have to either interrogate the dtype for the element
length, use the span field or se->string_length if you know the kind.

Not so much a bug as a 'feature', I'm afraid.

Paul

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/98408] Character lengths for allocatable character arrays
  2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
  2020-12-21 10:33 ` [Bug fortran/98408] " pault at gcc dot gnu.org
@ 2021-02-14 12:16 ` dominiq at lps dot ens.fr
  2023-03-28 10:09 ` pault at gcc dot gnu.org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: dominiq at lps dot ens.fr @ 2021-02-14 12:16 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

Dominique d'Humieres <dominiq at lps dot ens.fr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-02-14
             Status|UNCONFIRMED                 |WAITING
     Ever confirmed|0                           |1

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Compiling the test with -Wall gives

    2 |   character (len=:), allocatable :: a(:)
      |                                        ^
Warning: '.a' is used uninitialized [-Wuninitialized]

> Not so much a bug as a 'feature', I'm afraid.

Does it mean "another false positive for -Wuninitialized"?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/98408] Character lengths for allocatable character arrays
  2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
  2020-12-21 10:33 ` [Bug fortran/98408] " pault at gcc dot gnu.org
  2021-02-14 12:16 ` dominiq at lps dot ens.fr
@ 2023-03-28 10:09 ` pault at gcc dot gnu.org
  2023-04-08  8:04 ` cvs-commit at gcc dot gnu.org
  2023-04-08  9:36 ` pault at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pault at gcc dot gnu.org @ 2023-03-28 10:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

--- Comment #3 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to Dominique d'Humieres from comment #2)
> Compiling the test with -Wall gives
> 
>     2 |   character (len=:), allocatable :: a(:)
>       |                                        ^
> Warning: '.a' is used uninitialized [-Wuninitialized]
> 
> > Not so much a bug as a 'feature', I'm afraid.
> 
> Does it mean "another false positive for -Wuninitialized"?

It does look like it

Paul

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/98408] Character lengths for allocatable character arrays
  2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2023-03-28 10:09 ` pault at gcc dot gnu.org
@ 2023-04-08  8:04 ` cvs-commit at gcc dot gnu.org
  2023-04-08  9:36 ` pault at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-04-08  8:04 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Paul Thomas <pault@gcc.gnu.org>:

https://gcc.gnu.org/g:eac493851f07df98213ecf67a5e9ab41a7babcd2

commit r13-7121-geac493851f07df98213ecf67a5e9ab41a7babcd2
Author: Paul Thomas <pault@gcc.gnu.org>
Date:   Sat Apr 8 09:04:13 2023 +0100

    Fortran: Fix some of the bugs in associate [PR87477]

    2023-04-08  Paul Thomas  <pault@gcc.gnu.org>

    gcc/fortran
            PR fortran/87477
            * iresolve.cc (gfc_resolve_adjustl, gfc_resolve_adjustr): if
            string length is deferred use the string typespec for result.
            * resolve.cc (resolve_assoc_var): Handle parentheses around the
            target expression.
            (resolve_block_construct): Remove unnecessary static decls.
            * trans-array.cc (gfc_conv_expr_descriptor): Guard string len
            expression in condition. Improve handling of string length and
            span, especially for substrings of the descriptor.
            (duplicate_allocatable): Make element type more explicit with
            'eltype'.
            * trans-decl.cc (gfc_get_symbol_decl): Emit a fatal error with
            appropriate message instead of ICE if symbol type is unknown.
            (gfc_generate_function_code): Set current locus to proc_sym
            declared_at.
            * trans-expr.cc (gfc_get_expr_charlen): Retain last charlen in
            'previous' and use if end expression in substring reference is
            null.
            (gfc_conv_string_length): Use gfc_conv_expr_descriptor if
            'expr_flat' is an array. Add post block to catch deallocation
            of temporaries.
            (gfc_conv_procedure_call): Assign the parmse string length to
            the expression string length, if it is deferred.
            (gfc_trans_alloc_subarray_assign): If this is a deferred string
            length component, store the string length in the hidden comp.
            Update the typespec length accordingly. Generate a new type
            spec for the call to gfc_duplicate-allocatable in this case.
            * trans-io.cc (gfc_trans_transfer): Scalarize transfer of
            deferred character array components.

    gcc/testsuite/
            PR fortran/87477
            * gfortran.dg/associate_47.f90 : Enable substring test.
            * gfortran.dg/associate_51.f90 : Update an error message.
            * gfortran.dg/goacc/array-with-dt-2.f90 : Add span to
            uninitialzed dg-warnings.

            PR fortran/85686
            PR fortran/88247
            PR fortran/91941
            PR fortran/92779
            PR fortran/93339
            PR fortran/93813
            PR fortran/100948
            PR fortran/102106
            * gfortran.dg/associate_60.f90 : New test

            PR fortran/98408
            * gfortran.dg/pr98408.f90 : New test

            PR fortran/105205
            * gfortran.dg/pr105205.f90 : New test

            PR fortran/106918
            * gfortran.dg/pr106918.f90 : New test

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug fortran/98408] Character lengths for allocatable character arrays
  2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2023-04-08  8:04 ` cvs-commit at gcc dot gnu.org
@ 2023-04-08  9:36 ` pault at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pault at gcc dot gnu.org @ 2023-04-08  9:36 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98408

Paul Thomas <pault at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |RESOLVED
         Resolution|---                         |FIXED

--- Comment #5 from Paul Thomas <pault at gcc dot gnu.org> ---
Fixed on mainline

Thanks for the report

Paul

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-04-08  9:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-21  8:35 [Bug fortran/98408] New: Character lengths for allocatable character arrays tkoenig at gcc dot gnu.org
2020-12-21 10:33 ` [Bug fortran/98408] " pault at gcc dot gnu.org
2021-02-14 12:16 ` dominiq at lps dot ens.fr
2023-03-28 10:09 ` pault at gcc dot gnu.org
2023-04-08  8:04 ` cvs-commit at gcc dot gnu.org
2023-04-08  9:36 ` pault at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).