Skip to content

Commit b8128c8

Browse files
committed
Unifier.UnifyPointer: add missing brackets around (Domain.Selector | Domain.Pointer)
1 parent ba91740 commit b8128c8

File tree

205 files changed

+228250
-141131
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

205 files changed

+228250
-141131
lines changed

src/Core/Types/Unifier.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ public void Unify()
781781
if (b is PrimitiveType pb)
782782
{
783783
if ((ptrA.Size == 0 || pb.Size == 0 || ptrA.Size == pb.Size) &&
784-
(pb.Domain & Domain.Pointer | Domain.Selector) != 0)
784+
(pb.Domain & (Domain.Pointer | Domain.Selector)) != 0)
785785
{
786786
return ptrA.Clone();
787787
}

src/UnitTests/Decompiler/Typing/TypedExpressionRewriterTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1513,7 +1513,7 @@ define main
15131513
main_entry:
15141514
// succ: l1
15151515
l1:
1516-
(0xC00<16>->*((char *) bx + 4<i32>))()
1516+
(0xC00<16>->*(bx + 4<16>))()
15171517
main_exit:
15181518
15191519
";

src/tests/Analysis/CrwIpLiveness.exp

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fn0C00_0026_exit:
9191
Register word16 fn0C00_0033(Sequence segptr32 ds_si)
9292
// MayUse: Sequence ds:si:[0..31]
9393
// DataTypes:
94-
// Sequence ds:si: (ptr32 (struct 0002))
94+
// Sequence ds:si: (union (segptr32 u0) ((ptr32 (struct 0002)) u1))
9595
// LiveOut: ax
9696
// Trashed: SCZO ax Top
9797
// Preserved: sp

src/tests/Analysis/CrwParameters.exp

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ fn0C00_0000_exit:
4747
Register word16 fn0C00_0025(Sequence segptr32 ds_si, Register out ptr16 siOut)
4848
// MayUse: Sequence ds:si:[0..31]
4949
// DataTypes:
50-
// Sequence ds:si: (ptr32 (struct 0002))
50+
// Sequence ds:si: (union (segptr32 u0) ((ptr32 (struct 0002)) u1))
5151
// LiveOut: ax si
5252
// Trashed: ax si Top
5353
// Preserved: sp
@@ -80,7 +80,7 @@ fn0C00_0025_exit:
8080
Register word16 fn0C00_0027(Sequence segptr32 ds_si, Register out ptr16 siOut)
8181
// MayUse: Sequence ds:si:[0..31]
8282
// DataTypes:
83-
// Sequence ds:si: (ptr32 (struct 0002))
83+
// Sequence ds:si: (union (segptr32 u0) ((ptr32 (struct 0002)) u1))
8484
// LiveOut: ax si
8585
// Trashed: SCZO ax si Top
8686
// Preserved: sp
@@ -127,7 +127,7 @@ fn0C00_0027_exit:
127127
Register word16 fn0C00_002F(Sequence segptr32 ds_si, Register out ptr16 siOut)
128128
// MayUse: Sequence ds:si:[0..31]
129129
// DataTypes:
130-
// Sequence ds:si: (ptr32 (struct 0006))
130+
// Sequence ds:si: (union (segptr32 u0) ((ptr32 (struct 0006)) u1))
131131
// LiveOut: ax si
132132
// Trashed: ax si Top
133133
// Preserved: sp

src/tests/Analysis/CrwProcIsolation.exp

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fn0C00_0000_exit:
4141
void fn0C00_000F(Sequence segptr32 ds_di)
4242
// MayUse: Sequence ds:di:[0..31]
4343
// DataTypes:
44-
// Sequence ds:di: (ptr32 (struct 0002))
44+
// Sequence ds:di: (union (segptr32 u0) ((ptr32 (struct 0002)) u1))
4545
// LiveOut:
4646
// Trashed: Top
4747
// Preserved: sp

src/tests/Analysis/CrwSliceReturn.exp

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn0C00_0000_exit:
3636
Register word16 fn0C00_0015(Sequence segptr32 ds_si)
3737
// MayUse: Sequence ds:si:[0..31]
3838
// DataTypes:
39-
// Sequence ds:si: (ptr32 (struct 0002))
39+
// Sequence ds:si: (union (segptr32 u0) ((ptr32 (struct 0002)) u1))
4040
// LiveOut: ax
4141
// Trashed: ax Top
4242
// Preserved: sp

src/tests/Analysis/CrwStackVariables.exp

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ fn0C00_0000_exit:
4848
Register word16 fn0C00_0020(Stack segptr32 ptrArg02)
4949
// MayUse: Stack +0002:[0..31]
5050
// DataTypes:
51-
// Stack +0002: (ptr32 (struct 0006))
51+
// Stack +0002: (union (segptr32 u0) ((ptr32 (struct 0006)) u1))
5252
// LiveOut: ax
5353
// Trashed: ax bx es Top
5454
// Preserved: bp sp
@@ -80,7 +80,7 @@ fn0C00_0020_exit:
8080
Register word16 fn0C00_002E(Stack segptr32 ptrArg02, Stack word16 wArg06)
8181
// MayUse: Stack +0002:[0..31] Stack +0006:[0..15]
8282
// DataTypes:
83-
// Stack +0002: (ptr32 (struct 0008))
83+
// Stack +0002: (union (segptr32 u0) ((ptr32 (struct 0008 (6 T_6 t0006))) u1))
8484
// Stack +0006: word16
8585
// LiveOut: ax
8686
// Trashed: SCZO ax bx es Top

src/tests/Analysis/CrwVoidFunctions.exp

+2-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ void fn0C00_0029(Sequence segptr32 ds_di, Register word16 ax)
118118
// MayUse: ax:[0..15] Sequence ds:di:[0..31]
119119
// DataTypes:
120120
// ax: word16
121-
// Sequence ds:di: (ptr32 (struct 0002))
121+
// Sequence ds:di: (union (segptr32 u0) ((ptr32 (struct 0002 (0 T_2 t0000))) u1))
122122
// LiveOut:
123123
// Trashed: Top
124124
// Preserved: sp
@@ -147,7 +147,7 @@ fn0C00_0029_exit:
147147
void fn0C00_002C(Sequence segptr32 ds_di, Stack word16 wArg02)
148148
// MayUse: Sequence ds:di:[0..31] Stack +0002:[0..15]
149149
// DataTypes:
150-
// Sequence ds:di: (ptr32 (struct 0002))
150+
// Sequence ds:di: (union (segptr32 u0) ((ptr32 (struct 0002 (0 T_2 t0000))) u1))
151151
// Stack +0002: word16
152152
// LiveOut:
153153
// Trashed: ax Top

src/tests/Typing/DtbReals.exp

+8-8
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Eq_3: (ptr16 (segment (400 T_52 t0400) (408 T_57 t0408)))
4646
T_3 (in ds : selector)
4747
T_6 (in ds : selector)
4848
T_14 (in ds : selector)
49-
Eq_4: (ptr32 (fn T_11 (T_3, T_9, T_10)))
49+
Eq_4: (union (segptr32 u0) ((ptr32 (fn T_11 (T_3, T_9, T_10))) u1))
5050
T_4 (in fn0C00_0010 : segptr32)
5151
T_5 (in signature of fn0C00_0010 : void)
5252
Eq_7: (memptr T_6 (struct (0 T_19 t0000) (8 T_24 t0008) (10 T_29 t0010)))
@@ -57,7 +57,7 @@ Eq_8: (memptr T_6 (struct (0 T_39 t0000) (20 T_43 t0020) (28 T_48 t0028)))
5757
T_10 (in 0x320<16> : word16)
5858
Eq_11: void
5959
T_11 (in fn0C00_0010(ds, 0x300<16>, 0x320<16>) : void)
60-
Eq_12: (ptr32 (fn T_15 (T_3)))
60+
Eq_12: (union (segptr32 u0) ((ptr32 (fn T_15 (T_3))) u1))
6161
T_12 (in fn0C00_0037 : segptr32)
6262
T_13 (in signature of fn0C00_0037 : void)
6363
Eq_15: void
@@ -154,11 +154,11 @@ T_3: (in ds : selector)
154154
OrigDataType: (ptr16 (segment))
155155
T_4: (in fn0C00_0010 : segptr32)
156156
Class: Eq_4
157-
DataType: (ptr32 (fn T_11 (T_3, T_9, T_10)))
158-
OrigDataType: (ptr32 (fn T_11 (T_3, T_9, T_10)))
157+
DataType: (union (segptr32 u0) ((ptr32 (fn T_11 (T_3, T_9, T_10))) u1))
158+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_11 (T_3, T_9, T_10))) u1))
159159
T_5: (in signature of fn0C00_0010 : void)
160160
Class: Eq_4
161-
DataType: (ptr32 (fn T_11 (T_3, T_9, T_10)))
161+
DataType: (union (segptr32 u0) ((ptr32 (fn T_11 (T_3, T_9, T_10))) u1))
162162
OrigDataType:
163163
T_6: (in ds : selector)
164164
Class: Eq_3
@@ -186,11 +186,11 @@ T_11: (in fn0C00_0010(ds, 0x300<16>, 0x320<16>) : void)
186186
OrigDataType: void
187187
T_12: (in fn0C00_0037 : segptr32)
188188
Class: Eq_12
189-
DataType: (ptr32 (fn T_15 (T_3)))
190-
OrigDataType: (ptr32 (fn T_15 (T_3)))
189+
DataType: (union (segptr32 u0) ((ptr32 (fn T_15 (T_3))) u1))
190+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_15 (T_3))) u1))
191191
T_13: (in signature of fn0C00_0037 : void)
192192
Class: Eq_12
193-
DataType: (ptr32 (fn T_15 (T_3)))
193+
DataType: (union (segptr32 u0) ((ptr32 (fn T_15 (T_3))) u1))
194194
OrigDataType:
195195
T_14: (in ds : selector)
196196
Class: Eq_3

src/tests/Typing/DtbReg00011.exp

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Eq_1: (ptr32 (struct "Globals"))
3434
globals_t (in globals : (ptr32 (struct "Globals")))
3535
Eq_2: (ptr16 (segment "seg0C00_t" 002A))
3636
T_2 (in seg0C00 : selector)
37-
Eq_3: (ptr32 (fn T_5 ()))
37+
Eq_3: (union (segptr32 u0) ((ptr32 (fn T_5 ())) u1))
3838
T_3 (in fn0C00_0004 : segptr32)
3939
T_4 (in signature of fn0C00_0004 : void)
4040
Eq_5: void
@@ -106,11 +106,11 @@ T_2: (in seg0C00 : selector)
106106
OrigDataType: (ptr16 (segment "seg0C00_t" 002A))
107107
T_3: (in fn0C00_0004 : segptr32)
108108
Class: Eq_3
109-
DataType: (ptr32 (fn T_5 ()))
110-
OrigDataType: (ptr32 (fn T_5 ()))
109+
DataType: (union (segptr32 u0) ((ptr32 (fn T_5 ())) u1))
110+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_5 ())) u1))
111111
T_4: (in signature of fn0C00_0004 : void)
112112
Class: Eq_3
113-
DataType: (ptr32 (fn T_5 ()))
113+
DataType: (union (segptr32 u0) ((ptr32 (fn T_5 ())) u1))
114114
OrigDataType:
115115
T_5: (in fn0C00_0004() : void)
116116
Class: Eq_5

src/tests/Typing/TerComparison.exp

+16-10
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@ define proc1
1515
proc1_entry:
1616
// succ: l1
1717
l1:
18-
f = p->ptr0004 < &g_t1028
18+
f = p->t0004.u1 < 0x1028<32>
1919
proc1_exit:
2020

2121
// Equivalence classes ////////////
22-
Eq_1: (struct "Globals" (1028 Eq_5 t1028))
22+
Eq_1: (struct "Globals")
2323
globals_t (in globals : (ptr32 (struct "Globals")))
24-
Eq_2: (struct "Eq_2" (4 (ptr32 Eq_5) ptr0004))
24+
Eq_2: (struct "Eq_2" (4 Eq_5 t0004))
2525
T_2 (in p : (ptr32 Eq_2))
26-
Eq_5: (struct "foo" 0008)
27-
T_5 (in Mem0[p + 4<32>:(ptr32 (struct "foo" 0008))] : (ptr32 (struct "foo" 0008)))
26+
Eq_5: (union "Eq_5" (int32 u0) ((ptr32 Eq_9) u1))
27+
T_5 (in Mem0[p + 4<32>:(ptr32 Eq_9)] : (ptr32 Eq_9))
2828
T_6 (in 0x1028<32> : word32)
29+
Eq_9: (struct "foo" 0008)
30+
T_9
2931
// Type Variables ////////////
3032
globals_t: (in globals : (ptr32 (struct "Globals")))
3133
Class: Eq_1
@@ -43,19 +45,23 @@ T_4: (in p + 4<32> : word32)
4345
Class: Eq_4
4446
DataType: word32
4547
OrigDataType: word32
46-
T_5: (in Mem0[p + 4<32>:(ptr32 (struct "foo" 0008))] : (ptr32 (struct "foo" 0008)))
48+
T_5: (in Mem0[p + 4<32>:(ptr32 Eq_9)] : (ptr32 Eq_9))
4749
Class: Eq_5
48-
DataType: (ptr32 Eq_5)
49-
OrigDataType: (ptr32 (struct "foo" 0008))
50+
DataType: Eq_5
51+
OrigDataType: (union (int32 u0) ((ptr32 Eq_9) u1))
5052
T_6: (in 0x1028<32> : word32)
5153
Class: Eq_5
52-
DataType: (ptr32 Eq_5)
54+
DataType: int32
5355
OrigDataType: int32
54-
T_7: (in p->ptr0004 < &g_t1028 : bool)
56+
T_7: (in p->t0004.u1 < 0x1028<32> : bool)
5557
Class: Eq_7
5658
DataType: bool
5759
OrigDataType: bool
5860
T_8: (in f : bool)
5961
Class: Eq_7
6062
DataType: bool
6163
OrigDataType: bool
64+
T_9:
65+
Class: Eq_9
66+
DataType: Eq_9
67+
OrigDataType:

src/tests/Typing/TerReg00011.exp

+4-4
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Eq_1: (struct "Globals" (4DE10 (ptr16 Eq_25) ptr4DE10))
6767
globals_t (in globals : (ptr32 (struct "Globals")))
6868
Eq_2: (segment "seg0C00_t" 002A)
6969
T_2 (in seg0C00 : selector)
70-
Eq_3: (fn void ())
70+
Eq_3: (union "Eq_3" (segptr32 u0) ((ptr32 (fn void ())) u1))
7171
T_3 (in fn0C00_0004 : segptr32)
7272
T_4 (in signature of fn0C00_0004 : void)
7373
Eq_6: (union "Eq_6" (int16 u0) ((memptr (ptr16 Eq_25) byte) u1))
@@ -89,11 +89,11 @@ T_2: (in seg0C00 : selector)
8989
OrigDataType: (ptr16 (segment "seg0C00_t" 002A))
9090
T_3: (in fn0C00_0004 : segptr32)
9191
Class: Eq_3
92-
DataType: (ptr32 Eq_3)
93-
OrigDataType: (ptr32 (fn T_5 ()))
92+
DataType: Eq_3
93+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn void ())) u1))
9494
T_4: (in signature of fn0C00_0004 : void)
9595
Class: Eq_3
96-
DataType: (ptr32 Eq_3)
96+
DataType: Eq_3
9797
OrigDataType:
9898
T_5: (in fn0C00_0004() : void)
9999
Class: Eq_5

src/tests/Typing/TtranFactorial.exp

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Eq_2: (segment "seg0C00_t" 002B)
3636
T_2 (in seg0C00 : selector)
3737
Eq_3: (segment (64 int16 w0064))
3838
T_3 (in ds : selector)
39-
Eq_4: (fn int16 (int16))
39+
Eq_4: (union (segptr32 u0) ((ptr32 (fn int16 (int16))) u1))
4040
T_4 (in fn0C00_000F : segptr32)
4141
T_5 (in signature of fn0C00_000F : void)
4242
T_17 (in fn0C00_000F : segptr32)
@@ -55,11 +55,11 @@ T_3: (in ds : selector)
5555
OrigDataType: (ptr16 (segment (64 T_11 t0064)))
5656
T_4: (in fn0C00_000F : segptr32)
5757
Class: Eq_4
58-
DataType: (ptr32 Eq_4)
59-
OrigDataType: (ptr32 (fn T_8 (T_7)))
58+
DataType: Eq_4
59+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_8 (T_7))) u1))
6060
T_5: (in signature of fn0C00_000F : void)
6161
Class: Eq_4
62-
DataType: (ptr32 Eq_4)
62+
DataType: Eq_4
6363
OrigDataType:
6464
T_6: (in wArg02 : word16)
6565
Class: Eq_6
@@ -107,8 +107,8 @@ T_16: (in ax_13 : word16)
107107
OrigDataType: int16
108108
T_17: (in fn0C00_000F : segptr32)
109109
Class: Eq_4
110-
DataType: (ptr32 Eq_4)
111-
OrigDataType: (ptr32 (fn T_19 (T_18)))
110+
DataType: Eq_4
111+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_19 (T_18))) u1))
112112
T_18: (in wArg02 - 1<16> : word16)
113113
Class: Eq_6
114114
DataType: int16

src/tests/Typing/TtranFactorialReg.exp

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Eq_2: (segment "seg0C00_t" 0021)
3636
T_2 (in seg0C00 : selector)
3737
Eq_3: (segment (64 int16 w0064))
3838
T_3 (in ds : selector)
39-
Eq_4: (fn int16 (int16))
39+
Eq_4: (union (segptr32 u0) ((ptr32 (fn int16 (int16))) u1))
4040
T_4 (in fn0C00_000B : segptr32)
4141
T_5 (in signature of fn0C00_000B : void)
4242
T_17 (in fn0C00_000B : segptr32)
@@ -55,11 +55,11 @@ T_3: (in ds : selector)
5555
OrigDataType: (ptr16 (segment (64 T_11 t0064)))
5656
T_4: (in fn0C00_000B : segptr32)
5757
Class: Eq_4
58-
DataType: (ptr32 Eq_4)
59-
OrigDataType: (ptr32 (fn T_8 (T_7)))
58+
DataType: Eq_4
59+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_8 (T_7))) u1))
6060
T_5: (in signature of fn0C00_000B : void)
6161
Class: Eq_4
62-
DataType: (ptr32 Eq_4)
62+
DataType: Eq_4
6363
OrigDataType:
6464
T_6: (in cx : word16)
6565
Class: Eq_6
@@ -107,8 +107,8 @@ T_16: (in ax_11 : word16)
107107
OrigDataType: int16
108108
T_17: (in fn0C00_000B : segptr32)
109109
Class: Eq_4
110-
DataType: (ptr32 Eq_4)
111-
OrigDataType: (ptr32 (fn T_20 (T_19)))
110+
DataType: Eq_4
111+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_20 (T_19))) u1))
112112
T_18: (in 1<16> : word16)
113113
Class: Eq_18
114114
DataType: int16

src/tests/Typing/TtranMemAccesses.exp

+10-10
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ Eq_3: (segment (100 word16 w0100) (200 word16 w0200) (202 word16 w0202) (300 wor
4545
T_3 (in ds : selector)
4646
T_6 (in ds : selector)
4747
T_10 (in ds : selector)
48-
Eq_4: (fn void ((ptr16 Eq_3)))
48+
Eq_4: (union (segptr32 u0) ((ptr32 (fn void ((ptr16 Eq_3)))) u1))
4949
T_4 (in fn0C00_000C : segptr32)
5050
T_5 (in signature of fn0C00_000C : void)
5151
T_16 (in fn0C00_000C : segptr32)
52-
Eq_8: (fn void ((ptr16 Eq_3)))
52+
Eq_8: (union (segptr32 u0) ((ptr32 (fn void ((ptr16 Eq_3)))) u1))
5353
T_8 (in fn0C00_0015 : segptr32)
5454
T_9 (in signature of fn0C00_0015 : void)
5555
// Type Variables ////////////
@@ -67,11 +67,11 @@ T_3: (in ds : selector)
6767
OrigDataType: (ptr16 (segment (100 T_15 t0100)))
6868
T_4: (in fn0C00_000C : segptr32)
6969
Class: Eq_4
70-
DataType: (ptr32 Eq_4)
71-
OrigDataType: (ptr32 (fn T_7 (T_3)))
70+
DataType: Eq_4
71+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_7 (T_3))) u1))
7272
T_5: (in signature of fn0C00_000C : void)
7373
Class: Eq_4
74-
DataType: (ptr32 Eq_4)
74+
DataType: Eq_4
7575
OrigDataType:
7676
T_6: (in ds : selector)
7777
Class: Eq_3
@@ -83,11 +83,11 @@ T_7: (in fn0C00_000C(ds) : void)
8383
OrigDataType: void
8484
T_8: (in fn0C00_0015 : segptr32)
8585
Class: Eq_8
86-
DataType: (ptr32 Eq_8)
87-
OrigDataType: (ptr32 (fn T_11 (T_3)))
86+
DataType: Eq_8
87+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn void ((ptr16 Eq_3)))) u1))
8888
T_9: (in signature of fn0C00_0015 : void)
8989
Class: Eq_8
90-
DataType: (ptr32 Eq_8)
90+
DataType: Eq_8
9191
OrigDataType:
9292
T_10: (in ds : selector)
9393
Class: Eq_3
@@ -115,8 +115,8 @@ T_15: (in Mem7[ds:0x100<16>:word16] : word16)
115115
OrigDataType: word16
116116
T_16: (in fn0C00_000C : segptr32)
117117
Class: Eq_4
118-
DataType: (ptr32 Eq_4)
119-
OrigDataType: (ptr32 (fn T_17 (T_3)))
118+
DataType: Eq_4
119+
OrigDataType: (union (segptr32 u0) ((ptr32 (fn T_17 (T_3))) u1))
120120
T_17: (in fn0C00_000C(ds) : void)
121121
Class: Eq_7
122122
DataType: void

0 commit comments

Comments
 (0)