Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29528 토론

Nested associate statements internal compiler error

ivanp
새로운 기여자 I
1,069 조회수

Nesting associate statements leads to ICE's in both ifort and ifx. Here is a MWE which aborts:

associate(d => sin(42.0))
    associate(g => d)
        print *, g, loc(g) == loc(d)
    end associate
end associate
end

 Output of other compilers can be found in Compiler Explorer: https://godbolt.org/z/TE7z37vne

레이블 (1)
0 포인트
1 솔루션
Igor_V_Intel
중재자
569 조회수

It was a bug in ifx 2025.2 and earlier. Fixed in 2025.3.

원본 게시물의 솔루션 보기

5 응답
ivanp
새로운 기여자 I
577 조회수

It looks like this has been resolved with version 2025.3.0.


0 포인트
Igor_V_Intel
중재자
570 조회수

It was a bug in ifx 2025.2 and earlier. Fixed in 2025.3.

JFH
새로운 기여자 I
558 조회수

With my version of ifx the ICE has gone away but the output still looks wrong because the result of loc(g) == loc(d) is F. Gfortran gives T.

```

(lf) john:~$ ifx --version
ifx (IFX) 2025.3.0 20251010
Copyright (C) 1985-2025 Intel Corporation. All rights reserved.

(lf) john:~$ ifx associate.f90 && ./a.out
-0.9165215 F
(lf) john:~$ gfortran associate.f90 && ./a.out
-0.916521549 T
(lf) john:~$

```

0 포인트
ivanp
새로운 기여자 I
545 조회수

We'd have to read the standard "fine-print" here. I'm not sure the results of `loc` extension are relevant here. I used it to determine if compilers are creating copies or not. Note that you cannot use `c_loc` on `g` or `d`, because they don't have the pointer or target attribute. 

0 포인트
JFH
새로운 기여자 I
528 조회수

There is no standard "fine print" because the F2023 standard has no LOC intrinsic, and so gfortran and ifx must have provided it as extensions. The different outputs suggest that ASSOCIATE  was implemented in different ways that both work.

0 포인트
응답