This is the mail archive of the
mailing list for the GCC project.
Re: [patch, fortran] PR41859 ICE on invalid expression involving DT with pointer components in I/O
- From: Jerry DeLisle <jvdelisle at verizon dot net>
- To: gfortran <fortran at gcc dot gnu dot org>
- Cc: gcc patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 17 Aug 2010 20:22:34 -0700
- Subject: Re: [patch, fortran] PR41859 ICE on invalid expression involving DT with pointer components in I/O
- References: <4C69F243.firstname.lastname@example.org>
On 08/16/2010 07:21 PM, Jerry DeLisle wrote:
This patch is fairly simple. The ICE occurred because in resolve.c
(resolve_transfer) the checking for invalid was being skipped. When the
io_element is enclosed in parenthesis, the resulting expression
presented to resolve_transfer is expr_type == EXPR_OP. Existing code
just treated this as a case of neither a variable or function.
The patch traverses down the operands until a non EXPR_OP type
expression or NULL is found. It is necessary to traverse this way
because one can have multiple levels of parenthesis. Attempting to
simplify the expression did not work. (I suspect because we try to
preserve parens for use in translation, not sure)
Regression tested on i686-linux-gnu.
OK for trunk?
2010-08-16 Jerry DeLisle <email@example.com>
* resolve.c (resolve_transfer): Traverse operands and set expression
to be checked to a non EXPR_OP type.