Le 23/06/2024 à 22:58, Harald Anlauf a écrit :
Dear all,
the attached patch fixes issues exhibited by the testcase in comment#19 of
PR55978.
First, when passing an allocatable optional dummy array to an optional dummy,
we need to prevent accessing the data component of the array when the argument
is not present, and pass a null pointer instead. This is straightforward.
Second, the case of a missing pointer optional dummy array should have worked,
but the presence check surprisingly did not work as expected at -O0 or -Og,
but at higher optimization levels. Interestingly, the dump-tree looked right,
but running under gdb or investigating the assembler revealed that the order
of tests in a logical AND expression was opposed to what the tree-dump looked
like. Replacing TRUTH_AND_EXPR by TRUTH_ANDIF_EXPR and checking the optimized
dump confirmed that this does fix the issue.
Note that the tree-dump is not changed by this replacement. Does this mean
thar AND and ANDIF currently are not differentiated at this level?
tree-pretty-print.cc's op_symbol_code handles them as:
case TRUTH_AND_EXPR:
case TRUTH_ANDIF_EXPR:
return "&&";
so no, I don't think they are differentiated.
Regtested on x86_64-pc-linux-gnu. OK for mainline?
Would it be ok to backport this to 14-branch, too?
Sure, OK for both.
Thanks.