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).