Hi Thomas,

Thanks for finding the assignment a%len = 2 that escapes the check for
lvalues. I am back home tomorrow night and will investigate why this
one evades the trap. I think that an error test is needed in
expr.c(gfc_check_assign).

Cheers

Paul

On Sun, 28 Oct 2018 at 13:38, Thomas Koenig <tkoe...@netcologne.de> wrote:
>
> Hi Paul,
>
>
> >> inq would be easier to understand and unambiguous imho.
> >
> > Why? inquiry_type seems fine to me.
>
> I think Bernhard means the name of the member, i.
>
> I think it makes sense to leave as it is - gfc_ref is a
> struct that occurs a lot in complicated expressions, and the other
> members are one and two letters, too.
>
> > ....snip....
> >> Is the switch really worth it? I'd have used a plain chain of strcmp,
> >> fwiw.
> >
> > I have done it. However, I might revert in order to combine the switch
> > block where I set the typespec for the primary expression.
>
> Whatever suits you best.
>
> > I haven't added testcases for errors. Does anybody think that this is 
> > necessary?
>
> Might not be a bad idea to run through at least each new error message
> again.
>
> There is one illwfL test case which ICEs:
>
> $ cat b.f90
> program main
>    character(len=:), allocatable :: a
>    allocate(a,source="abc")
>    a%len = 2
>    print *,a
> end
> $ gfortran b.f90
> gimplification failed:
> (integer(kind=4)) .a <nop_expr 0x7f138ae67740
>      type <integer_type 0x7f138acd15e8 integer(kind=4) public SI
>          size <integer_cst 0x7f138acbcdb0 constant 32>
>          unit-size <integer_cst 0x7f138acbcdc8 constant 4>
>          align:32 warn_if_not_align:0 symtab:0 alias-set -1
> canonical-type 0x7f138acd15e8 precision:32 min <integer_cst
> 0x7f138acbcd68 -2147483648> max <integer_cst 0x7f138acbcd80 2147483647>
>          pointer_to_this <pointer_type 0x7f138acd89d8>>
>
>      arg:0 <var_decl 0x7f138b980ab0 .a
>          type <integer_type 0x7f138acd1738 integer(kind=8) public DI
>              size <integer_cst 0x7f138acbcb70 constant 64>
>              unit-size <integer_cst 0x7f138acbcb88 constant 8>
>              align:64 warn_if_not_align:0 symtab:0 alias-set -1
> canonical-type 0x7f138acd1738 precision:64 min <integer_cst
> 0x7f138acbcdf8 -9223372036854775808> max <integer_cst 0x7f138acbce10
> 9223372036854775807>
>              pointer_to_this <pointer_type 0x7f138ad057e0>>
>          used DI b.f90:1:0 size <integer_cst 0x7f138acbcb70 64>
> unit-size <integer_cst 0x7f138acbcb88 8>
>          align:64 warn_if_not_align:0 context <function_decl
> 0x7f138ae83200 MAIN__>
>          chain <var_decl 0x7f138b980b40 a type <pointer_type 0x7f138ae82540>
>              used unsigned DI b.f90:2:0 size <integer_cst 0x7f138acbcb70
> 64> unit-size <integer_cst 0x7f138acbcb88 8>
>              align:64 warn_if_not_align:0 context <function_decl
> 0x7f138ae83200 MAIN__>>>>
> b.f90:4:0:
>
>      4 |   a%len = 2
>        |
> internal compiler error: gimplification failed
> 0xb45602 gimplify_expr(tree_node**, gimple**, gimple**, bool
> (*)(tree_node*), int)
>          ../../trunk/gcc/gimplify.c:12568
>
> Regards
>
>         Thomas



-- 
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein

Reply via email to