Skip to content

Commit 5f2ccbe

Browse files
authored
Pre-allocate array member only for non-array struct variables (#1309)
1 parent b538dcd commit 5f2ccbe

File tree

4 files changed

+33
-9
lines changed

4 files changed

+33
-9
lines changed

integration_tests/structs_05.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,59 @@
1-
from ltypes import i32, f64, dataclass
1+
from ltypes import i32, f64, i64, i16, i8, f32, dataclass
22

33
@dataclass
44
class A:
55
y: f64
66
x: i32
7+
z: i64
8+
a: f32
9+
b: i16
10+
c: i8
11+
d: bool
712

813
def verify(s: A[:], x1: i32, y1: f64, x2: i32, y2: f64):
914
eps: f64 = 1e-12
1015
s0: A = s[0]
11-
print(s0.x, s0.y)
16+
print(s0.x, s0.y, s0.z, s0.a, s0.b, s0.c, s0.d)
1217
assert s0.x == x1
1318
assert abs(s0.y - y1) < eps
19+
assert s0.z == i64(x1)
20+
assert abs(s0.a - f32(y1)) < f32(1e-6)
21+
assert s0.b == i16(x1)
22+
assert s0.c == i8(x1)
23+
assert s0.d
1424

1525
s1: A = s[1]
16-
print(s1.x, s1.y)
26+
print(s1.x, s1.y, s1.z, s1.a, s1.b, s1.c, s1.d)
1727
assert s1.x == x2
1828
assert abs(s1.y - y2) < eps
29+
assert s1.z == i64(x2)
30+
assert abs(s1.a - f32(y2)) < f32(1e-6)
31+
assert s1.b == i16(x2)
32+
assert s1.c == i8(x2)
33+
assert s1.d
1934

2035
def update_1(s: A):
2136
s.x = 2
2237
s.y = 1.2
38+
s.z = i64(2)
39+
s.a = f32(1.2)
40+
s.b = i16(2)
41+
s.c = i8(2)
2342

2443
def update_2(s: A[:]):
2544
s[1].x = 3
2645
s[1].y = 2.3
46+
s[1].z = i64(3)
47+
s[1].a = f32(2.3)
48+
s[1].b = i16(3)
49+
s[1].c = i8(3)
2750

2851
def g():
2952
# TODO: Replace y: A[2] with y: A[2] = [None, None]
3053
# TODO: And enable cpython in integration_tests.
3154
y: A[2]
32-
y[0] = A(1.1, 1)
33-
y[1] = A(2.2, 2)
55+
y[0] = A(1.1, 1, i64(1), f32(1.1), i16(1), i8(1), True)
56+
y[1] = A(2.2, 2, i64(2), f32(2.2), i16(2), i8(2), True)
3457
verify(y, 1, 1.1, 2, 2.2)
3558
update_1(y[0])
3659
update_2(y)

src/libasr/codegen/asr_to_llvm.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2671,7 +2671,8 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
26712671
}
26722672
}
26732673
llvm::AllocaInst *ptr = builder->CreateAlloca(type, nullptr, v->m_name);
2674-
if( ASR::is_a<ASR::Struct_t>(*v->m_type) ) {
2674+
if( ASR::is_a<ASR::Struct_t>(*v->m_type) &&
2675+
!(is_array_type || is_malloc_array_type) ) {
26752676
allocate_array_members_of_struct(ptr, v->m_type);
26762677
}
26772678
if (emit_debug_info) {

tests/reference/asr-structs_05-fa98307.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
"basename": "asr-structs_05-fa98307",
33
"cmd": "lpython --show-asr --no-color {infile} -o {outfile}",
44
"infile": "tests/../integration_tests/structs_05.py",
5-
"infile_hash": "38cfd24d062d93591e8f450c47f64961c9c852be4ea3cc795123acae",
5+
"infile_hash": "de8579ed973a7a0d0edcc19be54e81a5dece462890e0c0d29586b856",
66
"outfile": null,
77
"outfile_hash": null,
88
"stdout": "asr-structs_05-fa98307.stdout",
9-
"stdout_hash": "c5b5fd094c9e20b94df927238591adfa20f2a58d2bd0b63b68da0be7",
9+
"stdout_hash": "3e6c6686eeaf5b8a3be807a3d66e6aa332a1fd651234e0e042230521",
1010
"stderr": null,
1111
"stderr_hash": null,
1212
"returncode": 0
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
(TranslationUnit (SymbolTable 1 {A: (StructType (SymbolTable 2 {x: (Variable 2 x Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y Local () () Default (Real 8 []) Source Public Required .false.)}) A [] [y x] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 101 {}) _lpython_main_program [g] [] [(SubroutineCall 1 g () [] ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), g: (Function (SymbolTable 6 {y: (Variable 6 y Local () () Default (Struct 1 A [((IntegerConstant 0 (Integer 4 [])) (IntegerConstant 2 (Integer 4 [])))]) Source Public Required .false.)}) g [verify update_1 update_2 verify] [] [(= (ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) (StructTypeConstructor 1 A [(RealConstant 1.100000 (Real 8 [])) (IntegerConstant 1 (Integer 4 []))] (Struct 1 A []) ()) ()) (= (ArrayItem (Var 6 y) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) (StructTypeConstructor 1 A [(RealConstant 2.200000 (Real 8 [])) (IntegerConstant 2 (Integer 4 []))] (Struct 1 A []) ()) ()) (SubroutineCall 1 verify () [((Var 6 y)) ((IntegerConstant 1 (Integer 4 []))) ((RealConstant 1.100000 (Real 8 []))) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 2.200000 (Real 8 [])))] ()) (SubroutineCall 1 update_1 () [((ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()))] ()) (SubroutineCall 1 update_2 () [((Var 6 y))] ()) (SubroutineCall 1 verify () [((Var 6 y)) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 1.200000 (Real 8 []))) ((IntegerConstant 3 (Integer 4 []))) ((RealConstant 2.300000 (Real 8 [])))] ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 100 {}) main_program [] [(SubroutineCall 1 _lpython_main_program () [] ())]), update_1: (Function (SymbolTable 4 {s: (Variable 4 s In () () Default (Struct 1 A []) Source Public Required .false.)}) update_1 [] [(Var 4 s)] [(= (StructInstanceMember (Var 4 s) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 s) 2 y (Real 8 []) ()) (RealConstant 1.200000 (Real 8 [])) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), update_2: (Function (SymbolTable 5 {s: (Variable 5 s InOut () () Default (Struct 1 A [(() ())]) Source Public Required .false.)}) update_2 [] [(Var 5 s)] [(= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 x (Integer 4 []) ()) (IntegerConstant 3 (Integer 4 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 y (Real 8 []) ()) (RealConstant 2.300000 (Real 8 [])) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), verify: (Function (SymbolTable 3 {abs: (ExternalSymbol 3 abs 8 abs lpython_builtin [] abs Private), abs@__lpython_overloaded_0__abs: (ExternalSymbol 3 abs@__lpython_overloaded_0__abs 8 __lpython_overloaded_0__abs lpython_builtin [] __lpython_overloaded_0__abs Public), eps: (Variable 3 eps Local () () Default (Real 8 []) Source Public Required .false.), s: (Variable 3 s InOut () () Default (Struct 1 A [(() ())]) Source Public Required .false.), s0: (Variable 3 s0 Local () () Default (Struct 1 A []) Source Public Required .false.), s1: (Variable 3 s1 Local () () Default (Struct 1 A []) Source Public Required .false.), x1: (Variable 3 x1 In () () Default (Integer 4 []) Source Public Required .false.), x2: (Variable 3 x2 In () () Default (Integer 4 []) Source Public Required .false.), y1: (Variable 3 y1 In () () Default (Real 8 []) Source Public Required .false.), y2: (Variable 3 y2 In () () Default (Real 8 []) Source Public Required .false.)}) verify [abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_0__abs] [(Var 3 s) (Var 3 x1) (Var 3 y1) (Var 3 x2) (Var 3 y2)] [(= (Var 3 eps) (RealConstant 0.000000 (Real 8 [])) ()) (= (Var 3 s0) (ArrayItem (Var 3 s) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) Eq (Var 3 x1) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) Sub (Var 3 y1) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (= (Var 3 s1) (ArrayItem (Var 3 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) Eq (Var 3 x2) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) Sub (Var 3 y2) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.)}) [])
1+
(TranslationUnit (SymbolTable 1 {A: (StructType (SymbolTable 2 {a: (Variable 2 a Local () () Default (Real 4 []) Source Public Required .false.), b: (Variable 2 b Local () () Default (Integer 2 []) Source Public Required .false.), c: (Variable 2 c Local () () Default (Integer 1 []) Source Public Required .false.), d: (Variable 2 d Local () () Default (Logical 4 []) Source Public Required .false.), x: (Variable 2 x Local () () Default (Integer 4 []) Source Public Required .false.), y: (Variable 2 y Local () () Default (Real 8 []) Source Public Required .false.), z: (Variable 2 z Local () () Default (Integer 8 []) Source Public Required .false.)}) A [] [y x z a b c d] Source Public .false. () ()), _lpython_main_program: (Function (SymbolTable 101 {}) _lpython_main_program [g] [] [(SubroutineCall 1 g () [] ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), g: (Function (SymbolTable 6 {y: (Variable 6 y Local () () Default (Struct 1 A [((IntegerConstant 0 (Integer 4 [])) (IntegerConstant 2 (Integer 4 [])))]) Source Public Required .false.)}) g [verify update_1 update_2 verify] [] [(= (ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) (StructTypeConstructor 1 A [(RealConstant 1.100000 (Real 8 [])) (IntegerConstant 1 (Integer 4 [])) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 1 (Integer 8 []))) (Cast (RealConstant 1.100000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.100000 (Real 4 []))) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 1 (Integer 2 []))) (Cast (IntegerConstant 1 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 1 (Integer 1 []))) (LogicalConstant .true. (Logical 4 []))] (Struct 1 A []) ()) ()) (= (ArrayItem (Var 6 y) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) (StructTypeConstructor 1 A [(RealConstant 2.200000 (Real 8 [])) (IntegerConstant 2 (Integer 4 [])) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) (Cast (RealConstant 2.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.200000 (Real 4 []))) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 []))) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 []))) (LogicalConstant .true. (Logical 4 []))] (Struct 1 A []) ()) ()) (SubroutineCall 1 verify () [((Var 6 y)) ((IntegerConstant 1 (Integer 4 []))) ((RealConstant 1.100000 (Real 8 []))) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 2.200000 (Real 8 [])))] ()) (SubroutineCall 1 update_1 () [((ArrayItem (Var 6 y) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()))] ()) (SubroutineCall 1 update_2 () [((Var 6 y))] ()) (SubroutineCall 1 verify () [((Var 6 y)) ((IntegerConstant 2 (Integer 4 []))) ((RealConstant 1.200000 (Real 8 []))) ((IntegerConstant 3 (Integer 4 []))) ((RealConstant 2.300000 (Real 8 [])))] ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), lpython_builtin: (IntrinsicModule lpython_builtin), main_program: (Program (SymbolTable 100 {}) main_program [] [(SubroutineCall 1 _lpython_main_program () [] ())]), update_1: (Function (SymbolTable 4 {s: (Variable 4 s In () () Default (Struct 1 A []) Source Public Required .false.)}) update_1 [] [(Var 4 s)] [(= (StructInstanceMember (Var 4 s) 2 x (Integer 4 []) ()) (IntegerConstant 2 (Integer 4 [])) ()) (= (StructInstanceMember (Var 4 s) 2 y (Real 8 []) ()) (RealConstant 1.200000 (Real 8 [])) ()) (= (StructInstanceMember (Var 4 s) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 2 (Integer 8 []))) ()) (= (StructInstanceMember (Var 4 s) 2 a (Real 4 []) ()) (Cast (RealConstant 1.200000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 1.200000 (Real 4 []))) ()) (= (StructInstanceMember (Var 4 s) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 2 (Integer 2 []))) ()) (= (StructInstanceMember (Var 4 s) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 2 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 2 (Integer 1 []))) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), update_2: (Function (SymbolTable 5 {s: (Variable 5 s InOut () () Default (Struct 1 A [(() ())]) Source Public Required .false.)}) update_2 [] [(Var 5 s)] [(= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 x (Integer 4 []) ()) (IntegerConstant 3 (Integer 4 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 y (Real 8 []) ()) (RealConstant 2.300000 (Real 8 [])) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 z (Integer 8 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 8 []) (IntegerConstant 3 (Integer 8 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 a (Real 4 []) ()) (Cast (RealConstant 2.300000 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 2.300000 (Real 4 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 b (Integer 2 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 2 []) (IntegerConstant 3 (Integer 2 []))) ()) (= (StructInstanceMember (ArrayItem (Var 5 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) 2 c (Integer 1 []) ()) (Cast (IntegerConstant 3 (Integer 4 [])) IntegerToInteger (Integer 1 []) (IntegerConstant 3 (Integer 1 []))) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.), verify: (Function (SymbolTable 3 {abs: (ExternalSymbol 3 abs 8 abs lpython_builtin [] abs Private), abs@__lpython_overloaded_0__abs: (ExternalSymbol 3 abs@__lpython_overloaded_0__abs 8 __lpython_overloaded_0__abs lpython_builtin [] __lpython_overloaded_0__abs Public), abs@__lpython_overloaded_1__abs: (ExternalSymbol 3 abs@__lpython_overloaded_1__abs 8 __lpython_overloaded_1__abs lpython_builtin [] __lpython_overloaded_1__abs Public), eps: (Variable 3 eps Local () () Default (Real 8 []) Source Public Required .false.), s: (Variable 3 s InOut () () Default (Struct 1 A [(() ())]) Source Public Required .false.), s0: (Variable 3 s0 Local () () Default (Struct 1 A []) Source Public Required .false.), s1: (Variable 3 s1 Local () () Default (Struct 1 A []) Source Public Required .false.), x1: (Variable 3 x1 In () () Default (Integer 4 []) Source Public Required .false.), x2: (Variable 3 x2 In () () Default (Integer 4 []) Source Public Required .false.), y1: (Variable 3 y1 In () () Default (Real 8 []) Source Public Required .false.), y2: (Variable 3 y2 In () () Default (Real 8 []) Source Public Required .false.)}) verify [abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs abs@__lpython_overloaded_0__abs abs@__lpython_overloaded_1__abs] [(Var 3 s) (Var 3 x1) (Var 3 y1) (Var 3 x2) (Var 3 y2)] [(= (Var 3 eps) (RealConstant 0.000000 (Real 8 [])) ()) (= (Var 3 s0) (ArrayItem (Var 3 s) [(() (IntegerConstant 0 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 x (Integer 4 []) ()) Eq (Var 3 x1) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 y (Real 8 []) ()) Sub (Var 3 y1) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s0) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y1) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s0) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x1) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s0) 2 d (Logical 4 []) ()) ()) (= (Var 3 s1) (ArrayItem (Var 3 s) [(() (IntegerConstant 1 (Integer 4 [])) ())] (Struct 1 A []) RowMajor ()) ()) (Print () [(StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ())] () ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 x (Integer 4 []) ()) Eq (Var 3 x2) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_0__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 y (Real 8 []) ()) Sub (Var 3 y2) (Real 8 []) ()))] (Real 8 []) () ()) Lt (Var 3 eps) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 z (Integer 8 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 8 []) ()) (Logical 4 []) ()) ()) (Assert (RealCompare (FunctionCall 3 abs@__lpython_overloaded_1__abs 3 abs [((RealBinOp (StructInstanceMember (Var 3 s1) 2 a (Real 4 []) ()) Sub (Cast (Var 3 y2) RealToReal (Real 4 []) ()) (Real 4 []) ()))] (Real 4 []) () ()) Lt (Cast (RealConstant 0.000001 (Real 8 [])) RealToReal (Real 4 []) (RealConstant 0.000001 (Real 4 []))) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 b (Integer 2 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 2 []) ()) (Logical 4 []) ()) ()) (Assert (IntegerCompare (StructInstanceMember (Var 3 s1) 2 c (Integer 1 []) ()) Eq (Cast (Var 3 x2) IntegerToInteger (Integer 1 []) ()) (Logical 4 []) ()) ()) (Assert (StructInstanceMember (Var 3 s1) 2 d (Logical 4 []) ()) ())] () Source Public Implementation () .false. .false. .false. .false. .false. [] [] .false.)}) [])

0 commit comments

Comments
 (0)