@@ -305,7 +305,10 @@ fn init_functions_generated_for_function_blocks() {
305
305
%self = alloca %foo*, align 8
306
306
store %foo* %0, %foo** %self, align 8
307
307
%deref = load %foo*, %foo** %self, align 8
308
- %to_init = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 1
308
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
309
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
310
+ %deref1 = load %foo*, %foo** %self, align 8
311
+ %to_init = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
309
312
store [81 x i8]* @s, [81 x i8]** %to_init, align 8
310
313
ret void
311
314
}
@@ -510,7 +513,10 @@ fn nested_initializer_pous() {
510
513
%b = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 2
511
514
call void @__init_bar(%bar* %b)
512
515
%deref1 = load %foo*, %foo** %self, align 8
513
- %str_ref = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
516
+ %__vtable = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 0
517
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
518
+ %deref2 = load %foo*, %foo** %self, align 8
519
+ %str_ref = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 1
514
520
store [81 x i8]* @str, [81 x i8]** %str_ref, align 8
515
521
ret void
516
522
}
@@ -522,6 +528,9 @@ fn nested_initializer_pous() {
522
528
%deref = load %bar*, %bar** %self, align 8
523
529
%b = getelementptr inbounds %bar, %bar* %deref, i32 0, i32 1
524
530
call void @__init_baz(%baz* %b)
531
+ %deref1 = load %bar*, %bar** %self, align 8
532
+ %__vtable = getelementptr inbounds %bar, %bar* %deref1, i32 0, i32 0
533
+ store i32* bitcast (%__vtable_bar* @__vtable_bar_instance to i32*), i32** %__vtable, align 8
525
534
ret void
526
535
}
527
536
@@ -530,7 +539,10 @@ fn nested_initializer_pous() {
530
539
%self = alloca %baz*, align 8
531
540
store %baz* %0, %baz** %self, align 8
532
541
%deref = load %baz*, %baz** %self, align 8
533
- %str_ref = getelementptr inbounds %baz, %baz* %deref, i32 0, i32 1
542
+ %__vtable = getelementptr inbounds %baz, %baz* %deref, i32 0, i32 0
543
+ store i32* bitcast (%__vtable_baz* @__vtable_baz_instance to i32*), i32** %__vtable, align 8
544
+ %deref1 = load %baz*, %baz** %self, align 8
545
+ %str_ref = getelementptr inbounds %baz, %baz* %deref1, i32 0, i32 1
534
546
store [81 x i8]* @str, [81 x i8]** %str_ref, align 8
535
547
ret void
536
548
}
@@ -720,9 +732,12 @@ fn local_address() {
720
732
%self = alloca %foo*, align 8
721
733
store %foo* %0, %foo** %self, align 8
722
734
%deref = load %foo*, %foo** %self, align 8
723
- %pi = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 2
735
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
736
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
724
737
%deref1 = load %foo*, %foo** %self, align 8
725
- %i = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
738
+ %pi = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 2
739
+ %deref2 = load %foo*, %foo** %self, align 8
740
+ %i = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 1
726
741
store i16* %i, i16** %pi, align 8
727
742
ret void
728
743
}
@@ -840,6 +855,9 @@ fn user_init_called_for_variables_on_stack() {
840
855
entry:
841
856
%self = alloca %foo*, align 8
842
857
store %foo* %0, %foo** %self, align 8
858
+ %deref = load %foo*, %foo** %self, align 8
859
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
860
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
843
861
ret void
844
862
}
845
863
@@ -1172,6 +1190,9 @@ fn stateful_pous_methods_and_structs_get_init_functions() {
1172
1190
entry:
1173
1191
%self = alloca %foo*, align 8
1174
1192
store %foo* %0, %foo** %self, align 8
1193
+ %deref = load %foo*, %foo** %self, align 8
1194
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1195
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1175
1196
ret void
1176
1197
}
1177
1198
@@ -1186,6 +1207,9 @@ fn stateful_pous_methods_and_structs_get_init_functions() {
1186
1207
entry:
1187
1208
%self = alloca %cl*, align 8
1188
1209
store %cl* %0, %cl** %self, align 8
1210
+ %deref = load %cl*, %cl** %self, align 8
1211
+ %__vtable = getelementptr inbounds %cl, %cl* %deref, i32 0, i32 0
1212
+ store i32* bitcast (%__vtable_cl* @__vtable_cl_instance to i32*), i32** %__vtable, align 8
1189
1213
ret void
1190
1214
}
1191
1215
@@ -1300,7 +1324,10 @@ fn global_instance() {
1300
1324
%self = alloca %foo*, align 8
1301
1325
store %foo* %0, %foo** %self, align 8
1302
1326
%deref = load %foo*, %foo** %self, align 8
1303
- %s = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 1
1327
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1328
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1329
+ %deref1 = load %foo*, %foo** %self, align 8
1330
+ %s = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
1304
1331
store [81 x i8]* @ps, [81 x i8]** %s, align 8
1305
1332
ret void
1306
1333
}
@@ -1422,7 +1449,10 @@ fn aliased_types() {
1422
1449
%self = alloca %foo*, align 8
1423
1450
store %foo* %0, %foo** %self, align 8
1424
1451
%deref = load %foo*, %foo** %self, align 8
1425
- %s = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 1
1452
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1453
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1454
+ %deref1 = load %foo*, %foo** %self, align 8
1455
+ %s = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
1426
1456
store [81 x i8]* @ps, [81 x i8]** %s, align 8
1427
1457
ret void
1428
1458
}
@@ -1621,6 +1651,9 @@ fn var_config_aliased_variables_initialized() {
1621
1651
entry:
1622
1652
%self = alloca %FB*, align 8
1623
1653
store %FB* %0, %FB** %self, align 8
1654
+ %deref = load %FB*, %FB** %self, align 8
1655
+ %__vtable = getelementptr inbounds %FB, %FB* %deref, i32 0, i32 0
1656
+ store i32* bitcast (%__vtable_FB* @__vtable_FB_instance to i32*), i32** %__vtable, align 8
1624
1657
ret void
1625
1658
}
1626
1659
@@ -1749,6 +1782,9 @@ fn var_external_blocks_are_ignored_in_init_functions() {
1749
1782
entry:
1750
1783
%self = alloca %foo*, align 8
1751
1784
store %foo* %0, %foo** %self, align 8
1785
+ %deref = load %foo*, %foo** %self, align 8
1786
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1787
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1752
1788
ret void
1753
1789
}
1754
1790
@@ -1832,20 +1868,23 @@ fn ref_to_local_member() {
1832
1868
%self = alloca %foo*, align 8
1833
1869
store %foo* %0, %foo** %self, align 8
1834
1870
%deref = load %foo*, %foo** %self, align 8
1835
- %ptr = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 2
1871
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1872
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1836
1873
%deref1 = load %foo*, %foo** %self, align 8
1837
- %s = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
1838
- store [81 x i8]* %s, [81 x i8]** %ptr, align 8
1874
+ %ptr = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 2
1839
1875
%deref2 = load %foo*, %foo** %self, align 8
1840
- %alias = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 3
1876
+ %s = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 1
1877
+ store [81 x i8]* %s, [81 x i8]** %ptr, align 8
1841
1878
%deref3 = load %foo*, %foo** %self, align 8
1842
- %s4 = getelementptr inbounds %foo, %foo* %deref3, i32 0, i32 1
1843
- store [81 x i8]* %s4, [81 x i8] ** %alias , align 8
1844
- %deref5 = load %foo* , %foo** %self, align 8
1845
- %reference_to = getelementptr inbounds %foo, %foo* %deref5, i32 0, i32 4
1879
+ %alias = getelementptr inbounds %foo, %foo* %deref3, i32 0, i32 3
1880
+ %deref4 = load %foo*, %foo ** %self , align 8
1881
+ %s5 = getelementptr inbounds %foo, %foo* %deref4, i32 0, i32 1
1882
+ store [81 x i8]* %s5, [81 x i8]** %alias, align 8
1846
1883
%deref6 = load %foo*, %foo** %self, align 8
1847
- %s7 = getelementptr inbounds %foo, %foo* %deref6, i32 0, i32 1
1848
- store [81 x i8]* %s7, [81 x i8]** %reference_to, align 8
1884
+ %reference_to = getelementptr inbounds %foo, %foo* %deref6, i32 0, i32 4
1885
+ %deref7 = load %foo*, %foo** %self, align 8
1886
+ %s8 = getelementptr inbounds %foo, %foo* %deref7, i32 0, i32 1
1887
+ store [81 x i8]* %s8, [81 x i8]** %reference_to, align 8
1849
1888
ret void
1850
1889
}
1851
1890
@@ -1933,20 +1972,23 @@ fn ref_to_local_member_shadows_global() {
1933
1972
%self = alloca %foo*, align 8
1934
1973
store %foo* %0, %foo** %self, align 8
1935
1974
%deref = load %foo*, %foo** %self, align 8
1936
- %ptr = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 2
1975
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
1976
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
1937
1977
%deref1 = load %foo*, %foo** %self, align 8
1938
- %s = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
1939
- store [81 x i8]* %s, [81 x i8]** %ptr, align 8
1978
+ %ptr = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 2
1940
1979
%deref2 = load %foo*, %foo** %self, align 8
1941
- %alias = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 3
1980
+ %s = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 1
1981
+ store [81 x i8]* %s, [81 x i8]** %ptr, align 8
1942
1982
%deref3 = load %foo*, %foo** %self, align 8
1943
- %s4 = getelementptr inbounds %foo, %foo* %deref3, i32 0, i32 1
1944
- store [81 x i8]* %s4, [81 x i8] ** %alias , align 8
1945
- %deref5 = load %foo* , %foo** %self, align 8
1946
- %reference_to = getelementptr inbounds %foo, %foo* %deref5, i32 0, i32 4
1983
+ %alias = getelementptr inbounds %foo, %foo* %deref3, i32 0, i32 3
1984
+ %deref4 = load %foo*, %foo ** %self , align 8
1985
+ %s5 = getelementptr inbounds %foo, %foo* %deref4, i32 0, i32 1
1986
+ store [81 x i8]* %s5, [81 x i8]** %alias, align 8
1947
1987
%deref6 = load %foo*, %foo** %self, align 8
1948
- %s7 = getelementptr inbounds %foo, %foo* %deref6, i32 0, i32 1
1949
- store [81 x i8]* %s7, [81 x i8]** %reference_to, align 8
1988
+ %reference_to = getelementptr inbounds %foo, %foo* %deref6, i32 0, i32 4
1989
+ %deref7 = load %foo*, %foo** %self, align 8
1990
+ %s8 = getelementptr inbounds %foo, %foo* %deref7, i32 0, i32 1
1991
+ store [81 x i8]* %s8, [81 x i8]** %reference_to, align 8
1950
1992
ret void
1951
1993
}
1952
1994
@@ -2036,6 +2078,9 @@ fn temporary_variable_ref_to_local_member() {
2036
2078
entry:
2037
2079
%self = alloca %foo*, align 8
2038
2080
store %foo* %0, %foo** %self, align 8
2081
+ %deref = load %foo*, %foo** %self, align 8
2082
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2083
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2039
2084
ret void
2040
2085
}
2041
2086
@@ -2187,6 +2232,9 @@ fn initializing_method_variables_with_refs() {
2187
2232
entry:
2188
2233
%self = alloca %foo*, align 8
2189
2234
store %foo* %0, %foo** %self, align 8
2235
+ %deref = load %foo*, %foo** %self, align 8
2236
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2237
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2190
2238
ret void
2191
2239
}
2192
2240
@@ -2283,6 +2331,9 @@ fn initializing_method_variables_with_refs_referencing_parent_pou_variable() {
2283
2331
entry:
2284
2332
%self = alloca %foo*, align 8
2285
2333
store %foo* %0, %foo** %self, align 8
2334
+ %deref = load %foo*, %foo** %self, align 8
2335
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2336
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2286
2337
ret void
2287
2338
}
2288
2339
@@ -2378,6 +2429,9 @@ fn initializing_method_variables_with_refs_referencing_global_variable() {
2378
2429
entry:
2379
2430
%self = alloca %foo*, align 8
2380
2431
store %foo* %0, %foo** %self, align 8
2432
+ %deref = load %foo*, %foo** %self, align 8
2433
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2434
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2381
2435
ret void
2382
2436
}
2383
2437
@@ -2476,6 +2530,9 @@ fn initializing_method_variables_with_refs_shadowing() {
2476
2530
entry:
2477
2531
%self = alloca %foo*, align 8
2478
2532
store %foo* %0, %foo** %self, align 8
2533
+ %deref = load %foo*, %foo** %self, align 8
2534
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2535
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2479
2536
ret void
2480
2537
}
2481
2538
@@ -2569,6 +2626,9 @@ fn initializing_method_variables_with_alias() {
2569
2626
entry:
2570
2627
%self = alloca %foo*, align 8
2571
2628
store %foo* %0, %foo** %self, align 8
2629
+ %deref = load %foo*, %foo** %self, align 8
2630
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2631
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2572
2632
ret void
2573
2633
}
2574
2634
@@ -2662,6 +2722,9 @@ fn initializing_method_variables_with_reference_to() {
2662
2722
entry:
2663
2723
%self = alloca %foo*, align 8
2664
2724
store %foo* %0, %foo** %self, align 8
2725
+ %deref = load %foo*, %foo** %self, align 8
2726
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2727
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2665
2728
ret void
2666
2729
}
2667
2730
@@ -2781,9 +2844,12 @@ fn methods_call_init_functions_for_their_members() {
2781
2844
%self = alloca %foo*, align 8
2782
2845
store %foo* %0, %foo** %self, align 8
2783
2846
%deref = load %foo*, %foo** %self, align 8
2784
- %y = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 2
2847
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
2848
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2785
2849
%deref1 = load %foo*, %foo** %self, align 8
2786
- %x = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 1
2850
+ %y = getelementptr inbounds %foo, %foo* %deref1, i32 0, i32 2
2851
+ %deref2 = load %foo*, %foo** %self, align 8
2852
+ %x = getelementptr inbounds %foo, %foo* %deref2, i32 0, i32 1
2787
2853
store i32* %x, i32** %y, align 8
2788
2854
ret void
2789
2855
}
@@ -2799,6 +2865,9 @@ fn methods_call_init_functions_for_their_members() {
2799
2865
entry:
2800
2866
%self = alloca %bar*, align 8
2801
2867
store %bar* %0, %bar** %self, align 8
2868
+ %deref = load %bar*, %bar** %self, align 8
2869
+ %__vtable = getelementptr inbounds %bar, %bar* %deref, i32 0, i32 0
2870
+ store i32* bitcast (%__vtable_bar* @__vtable_bar_instance to i32*), i32** %__vtable, align 8
2802
2871
ret void
2803
2872
}
2804
2873
@@ -2930,6 +2999,9 @@ fn user_fb_init_is_added_and_called_if_it_exists() {
2930
2999
entry:
2931
3000
%self = alloca %foo*, align 8
2932
3001
store %foo* %0, %foo** %self, align 8
3002
+ %deref = load %foo*, %foo** %self, align 8
3003
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
3004
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
2933
3005
ret void
2934
3006
}
2935
3007
@@ -3091,6 +3163,9 @@ fn user_fb_init_in_global_struct() {
3091
3163
entry:
3092
3164
%self = alloca %foo*, align 8
3093
3165
store %foo* %0, %foo** %self, align 8
3166
+ %deref = load %foo*, %foo** %self, align 8
3167
+ %__vtable = getelementptr inbounds %foo, %foo* %deref, i32 0, i32 0
3168
+ store i32* bitcast (%__vtable_foo* @__vtable_foo_instance to i32*), i32** %__vtable, align 8
3094
3169
ret void
3095
3170
}
3096
3171
0 commit comments