-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
Description
Version of flang-new : 20.0.0(74b56c7eb807e2ba54bd7a2bcfda5d0bceff1c0c)/AArch64
Preprocessor does not work correctly in if statement.
When I look at the file (snggo785_2.i) processed by the preprocessor, lines 3, 5, and 20 are processed correctly, but line 19 is not.
For the following line
19 if((1.e.2)/=3) print *,'error-1'
Expect to translate as follows
19 if((1.eeeee.2)/=3) print *,'error-1'
The following are the test program, Flang-new, Gfortran and ifx compilation result.
snggo785_2.F90:
#define e eeeee
module m
interface operator(.e.)
module procedure ir,rr
end interface operator(.e.)
contains
function ir(k1,k2)
intent(in)::k1,k2
ir=k1+k2
end function ir
function rr(k1,k2)
real,intent(in)::k1,k2
rr=k1+k2
end function rr
end module m
program main
use m
if((1.e.2)/=3) print *,'error-1'
if(abs((1..e..2)-1.2)>0.001) print *,'error-2'
print *,'pass'
end program main$ flang-new snggo785_2.F90 -save-temps
error: Semantic errors in snggo785_2.i
./snggo785_2.F90:19:11: error: No operator .E. defined for INTEGER(4) and INTEGER(4)
if((1.e.2)/=3) print *,'error-1'
^^^^^
$ cat snggo785_2.i -n
1 #line "./snggo785_2.F90" 2
2 module m
3 interface operator(.eeeee.)
4 module procedure ir,rr
5 end interface operator(.eeeee.)
6 contains
7 function ir(k1,k2)
8 intent(in)::k1,k2
9 ir=k1+k2
10 end function ir
11 function rr(k1,k2)
12 real,intent(in)::k1,k2
13 rr=k1+k2
14 end function rr
15 end module m
16
17 program main
18 use m
19 if((1.e.2)/=3) print *,'error-1'
20 if(abs((1..eeeee..2)-1.2)>0.001) print *,'error-2'
21 print *,'pass'
22 end program main
$
$ gfortran snggo785_2.F90 -save-temps
$ cat a-snggo785_2.f90 -n
1 # 1 "snggo785_2.F90"
2 # 1 "<built-in>"
3 # 1 "<command-line>"
4 # 1 "snggo785_2.F90"
5
6 module m
7 interface operator(.eeeee.)
8 module procedure ir,rr
9 end interface operator(.eeeee.)
10 contains
11 function ir(k1,k2)
12 intent(in)::k1,k2
13 ir=k1+k2
14 end function ir
15 function rr(k1,k2)
16 real,intent(in)::k1,k2
17 rr=k1+k2
18 end function rr
19 end module m
20
21 program main
22 use m
23 if((1.eeeee.2)/=3) print *,'error-1'
24 if(abs((1..eeeee..2)-1.2)>0.001) print *,'error-2'
25 print *,'pass'
26 end program main
$
$ ifx snggo785_2.F90 -P
$ cat snggo785_2.i90 -n
1 # 1 "snggo785_2.F90"
2
3 module m
4 interface operator(.eeeee.)
5 module procedure ir,rr
6 end interface operator(.eeeee.)
7 contains
8 function ir(k1,k2)
9 intent(in)::k1,k2
10 ir=k1+k2
11 end function ir
12 function rr(k1,k2)
13 real,intent(in)::k1,k2
14 rr=k1+k2
15 end function rr
16 end module m
17
18 program main
19 use m
20 if((1.eeeee.2)/=3) print *,'error-1'
21 if(abs((1..eeeee..2)-1.2)>0.001) print *,'error-2'
22 print *,'pass'
23 end program main
$
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done