Skip to content

Commit 7c1f685

Browse files
dulmarodmeta-codesync[bot]
authored andcommitted
[swift] Fix alloca type
Summary: According to the llvm docs https://llvm.org/docs/LangRef.html#i-alloca, alloca returns a pointer, so we make sure this is the case. This solves some typechecking errors. Reviewed By: ngorogiannis Differential Revision: D90983487 Privacy Context Container: L1208441 fbshipit-source-id: 431943b6e829d22cb58a4b0c8c03430de5a27a37
1 parent 9aaa1a9 commit 7c1f685

File tree

5 files changed

+25
-19
lines changed

5 files changed

+25
-19
lines changed

infer/src/llvm/Llair2Textual.ml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -763,8 +763,14 @@ let cmnd_to_instrs ~(proc_state : ProcState.t) block =
763763
@ exp1_instrs @ textual_instrs
764764
| Alloc {reg} ->
765765
let reg_var_name = Var.reg_to_var_name reg in
766-
let ptr_typ = Type.to_annotated_textual_typ lang ~mangled_map ~struct_map (Reg.typ reg) in
767-
ProcState.update_locals ~proc_state reg_var_name ptr_typ ;
766+
let ptr_typ = Type.to_textual_typ lang ~mangled_map ~struct_map (Reg.typ reg) in
767+
let ptr_typ =
768+
if not (Textual.Typ.is_pointer ptr_typ) then
769+
if Textual.Lang.is_swift lang then Textual.Typ.Ptr Textual.Typ.any_type_swift
770+
else Textual.Typ.Ptr Textual.Typ.any_type_llvm
771+
else ptr_typ
772+
in
773+
ProcState.update_locals ~proc_state reg_var_name (Textual.Typ.mk_without_attributes ptr_typ) ;
768774
textual_instrs
769775
| Free _ when Textual.Lang.is_swift lang ->
770776
(* ignore [free] in Swift for now until we know if/where it's needed *)

infer/tests/codetoanalyze/c/llvm-frontend/base.c.sil

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
.source_language = "C" @?
88

99
define test9() : int {
10-
local ret: int, ptr: *ptr_elt
10+
local ret: *ptr_elt, ptr: *ptr_elt
1111
#: @[61:14]
1212
n1 = __sil_malloc(<int>) @[61:14]
1313
store &ptr <- n1 @[61:8]
@@ -24,7 +24,7 @@ define test9() : int {
2424
} @?
2525

2626
define test8(var1: *int) : int {
27-
local var3: int, ret: int, ptr: *ptr_elt, null_ptr: *ptr_elt
27+
local var3: *ptr_elt, ret: *ptr_elt, ptr: *ptr_elt, null_ptr: *ptr_elt
2828
#: @[117:0]
2929
n1 = load &var1 @[117:0]
3030
store &ptr <- n1 @[117:0]
@@ -57,7 +57,7 @@ define test8(var1: *int) : int {
5757
} @?
5858

5959
define test7() : int {
60-
local var2: int, ptr: *ptr_elt
60+
local var2: *ptr_elt, ptr: *ptr_elt
6161
#: @[41:8]
6262
store &ptr <- null @[41:8]
6363
n2 = call_add() @[42:7]
@@ -83,7 +83,7 @@ define test7() : int {
8383
} @?
8484

8585
define test6() : int {
86-
local var2: int, ptr: *ptr_elt
86+
local var2: *ptr_elt, ptr: *ptr_elt
8787
#: @[33:8]
8888
store &ptr <- null @[33:8]
8989
n2 = call_add() @[34:7]
@@ -140,7 +140,7 @@ define test3(var1: *int) : int {
140140
} @?
141141

142142
define test2() : int {
143-
local n2: int, n1: int
143+
local n2: *ptr_elt, n1: *ptr_elt
144144
#: @[19:10]
145145
n1 = load &n1 @[19:10]
146146
n2 = load &n2 @[19:15]
@@ -149,7 +149,7 @@ define test2() : int {
149149
} @?
150150

151151
define test17(var1: int) : int {
152-
local z: int, b: int
152+
local z: *ptr_elt, b: *ptr_elt
153153
#: @[115:0]
154154
n1 = load &var1 @[115:0]
155155
store &b <- n1 @[115:0]
@@ -162,7 +162,7 @@ define test17(var1: int) : int {
162162
} @?
163163

164164
define test16(var1: *Person, var2: *Cat) : int {
165-
local person: *ptr_elt, cat: *ptr_elt, age: int
165+
local person: *ptr_elt, cat: *ptr_elt, age: *ptr_elt
166166
#: @[113:0]
167167
n1 = load &var1 @[113:0]
168168
store &person <- n1 @[113:0]
@@ -198,7 +198,7 @@ define test16(var1: *Person, var2: *Cat) : int {
198198
} @?
199199

200200
define test15() : int {
201-
local person: struct::Person, age: int
201+
local person: *ptr_elt, age: *ptr_elt
202202
#: @[125:17]
203203
_ = $builtins.memcpy(&person, &__const::test15::person, 32, 0) @[125:17]
204204
n1 = get_age(&person) @[126:13]
@@ -223,7 +223,7 @@ define test15() : int {
223223
} @?
224224

225225
define test14() : int {
226-
local var2: int, person: *ptr_elt, age: int
226+
local var2: *ptr_elt, person: *ptr_elt, age: *ptr_elt
227227
#: @[112:27]
228228
n1 = __sil_malloc(<int>) @[112:27]
229229
store &person <- n1 @[112:18]
@@ -269,7 +269,7 @@ define test14() : int {
269269
} @?
270270

271271
define test13() : int {
272-
local i: int
272+
local i: *ptr_elt
273273
#: @[88:7]
274274
store &i <- 10 @[88:7]
275275
jmp 2 @[89:3]
@@ -323,7 +323,7 @@ define test11() : void {
323323
} @?
324324

325325
define test10() : int {
326-
local sum: int, i: int
326+
local sum: *ptr_elt, i: *ptr_elt
327327
#: @[69:7]
328328
store &sum <- 0 @[69:7]
329329
store &i <- 0 @[70:12]
@@ -380,7 +380,7 @@ define npe_bad() : int {
380380
declare my_fun(*ptr_elt) : *ptr_elt
381381

382382
define main() : int {
383-
local var2: int
383+
local var2: *ptr_elt
384384
#: @[112:0]
385385
store &var2 <- 0 @[112:0]
386386
ret 0 @[11:14]
@@ -414,7 +414,7 @@ define deref_example(var1: *int) : int {
414414
} @?
415415

416416
define call_add1(var1: *int, var2: int) : int {
417-
local y: int, ptr: *ptr_elt
417+
local y: *ptr_elt, ptr: *ptr_elt
418418
#: @[108:0]
419419
n1 = load &var1 @[108:0]
420420
store &ptr <- n1 @[108:0]
@@ -444,7 +444,7 @@ define call_add() : int {
444444
declare bar() : *ptr_elt
445445

446446
define add(var1: int, var2: int) : int {
447-
local n2: int, n1: int
447+
local n2: *ptr_elt, n1: *ptr_elt
448448
#: @[106:0]
449449
n1 = load &var1 @[106:0]
450450
store &n1 <- n1 @[106:0]

infer/tests/codetoanalyze/swift/frontend/base.swift.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ define $ss25_unimplementedInitializer9className04initD04file4line6columns5NeverO
300300
} @?
301301

302302
define $ss25_unimplementedInitializer9className04initD04file4line6columns5NeverOs12StaticStringV_A2JS2utFySRys5UInt8VGXEfU_yAMXEfU_(var1: *__infer_swift_type<ptr_elt>, var2: int, var3: int, var4: int, var5: int, var6: int, var7: int, var8: int, var9: int, var10: int) : void {
303-
local var43: int, var13: int, var12: *__infer_swift_type<ptr_elt>
303+
local var43: *__infer_swift_type<ptr_elt>, var13: *__infer_swift_type<ptr_elt>, var12: *__infer_swift_type<ptr_elt>
304304
#: @[296:0]
305305
store &var12 <- null @[296:0]
306306
n3 = load &var13 @[297:0]

infer/tests/codetoanalyze/swift/frontend/retain_cycle.swift.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ declare $s5Hello9TransportC15ConnectionStateOAESYAAWl() : *__infer_swift_type<pt
483483
declare $s5Hello9TransportC15ConnectionStateOAESQAAWl() : *__infer_swift_type<ptr_elt>
484484

485485
define .plain_name = "rawValue.get" $s5Hello9TransportC15ConnectionStateO8rawValueSSvg(var1: int) : *__infer_tuple_class<int,*__infer_swift_type<ptr_elt>> {
486-
local self: int
486+
local self: *__infer_swift_type<ptr_elt>
487487
#: @[240:0]
488488
n1 = load &var1 @[240:0]
489489
store &self <- __sil_cast(<int>, n1) @[240:0]

infer/tests/codetoanalyze/swift/frontend/student.swift.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2009,7 +2009,7 @@ declare .plain_name = "view.modify" $s5Hello14ViewControllerC4viewAA06CustomB0CS
20092009
declare .plain_name = "view.modify" .method_offset = "13" __infer_swift_type<T5Hello14ViewControllerC,ViewController>.$s5Hello14ViewControllerC4viewAA06CustomB0CSgvM(*__infer_swift_type<ptr_elt>, *__infer_swift_type<ptr_elt>) : void
20102010

20112011
define .plain_name = "test_optional" $s5Hello13test_optionalyS2iSgF(age: *__infer_swift_type<ptr_elt>, var2: int) : int {
2012-
local actualAge: int
2012+
local actualAge: *__infer_swift_type<ptr_elt>
20132013
#: @[327:0]
20142014
n3 = load &age @[327:0]
20152015
n1 = load &var2 @[327:0]

0 commit comments

Comments
 (0)