diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll index c3572bd0e79..15b5db3ef74 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll @@ -121,7 +121,7 @@ abstract class TranslatedVariableDeclaration extends TranslatedElement, Initiali private predicate hasUninitializedInstruction() { not exists(getInitialization()) or getInitialization() instanceof TranslatedListInitialization or - getInitialization() instanceof TranslatedStringLiteralInitialization + getInitialization().(TranslatedStringLiteralInitialization).zeroInitRange(_, _) } } diff --git a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll index 21ad11513bd..c6911a048c7 100644 --- a/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll +++ b/cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll @@ -340,7 +340,7 @@ class TranslatedStringLiteralInitialization extends TranslatedDirectInitializati * Holds if the `elementCount` array elements starting at `startIndex` must be * zero initialized. */ - private predicate zeroInitRange(int startIndex, int elementCount) { + predicate zeroInitRange(int startIndex, int elementCount) { exists(int targetCount | startIndex = expr.getUnspecifiedType().(ArrayType).getArraySize() and targetCount = getContext().getTargetType().getUnspecifiedType().(ArrayType).getArraySize() and diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index b4480e1c580..e763b3c1263 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -2675,58 +2675,56 @@ ir.cpp: # 572| r0_10(glval) = PointerAdd[1] : r0_3, r0_9 # 572| mu0_11(unknown[31]) = Store : &:r0_10, r0_8 # 573| r0_12(glval) = VariableAddress[a_nopad] : -# 573| mu0_13(char[4]) = Uninitialized[a_nopad] : &:r0_12 -# 573| r0_14(glval) = StringConstant["foo"] : -# 573| r0_15(char[4]) = Load : &:r0_14, ~mu0_2 -# 573| mu0_16(char[4]) = Store : &:r0_12, r0_15 -# 574| r0_17(glval) = VariableAddress[a_infer] : -# 574| mu0_18(char[5]) = Uninitialized[a_infer] : &:r0_17 -# 574| r0_19(glval) = StringConstant["blah"] : -# 574| r0_20(char[5]) = Load : &:r0_19, ~mu0_2 -# 574| mu0_21(char[5]) = Store : &:r0_17, r0_20 -# 575| r0_22(glval) = VariableAddress[b] : -# 575| mu0_23(char[2]) = Uninitialized[b] : &:r0_22 -# 576| r0_24(glval) = VariableAddress[c] : -# 576| mu0_25(char[2]) = Uninitialized[c] : &:r0_24 -# 576| r0_26(int) = Constant[0] : -# 576| r0_27(glval) = PointerAdd[1] : r0_24, r0_26 -# 576| r0_28(unknown[2]) = Constant[0] : -# 576| mu0_29(unknown[2]) = Store : &:r0_27, r0_28 -# 577| r0_30(glval) = VariableAddress[d] : -# 577| mu0_31(char[2]) = Uninitialized[d] : &:r0_30 -# 577| r0_32(int) = Constant[0] : -# 577| r0_33(glval) = PointerAdd[1] : r0_30, r0_32 -# 577| r0_34(char) = Constant[0] : -# 577| mu0_35(char) = Store : &:r0_33, r0_34 -# 577| r0_36(int) = Constant[1] : -# 577| r0_37(glval) = PointerAdd[1] : r0_30, r0_36 -# 577| r0_38(char) = Constant[0] : -# 577| mu0_39(char) = Store : &:r0_37, r0_38 -# 578| r0_40(glval) = VariableAddress[e] : -# 578| mu0_41(char[2]) = Uninitialized[e] : &:r0_40 -# 578| r0_42(int) = Constant[0] : -# 578| r0_43(glval) = PointerAdd[1] : r0_40, r0_42 -# 578| r0_44(char) = Constant[0] : -# 578| mu0_45(char) = Store : &:r0_43, r0_44 -# 578| r0_46(int) = Constant[1] : -# 578| r0_47(glval) = PointerAdd[1] : r0_40, r0_46 -# 578| r0_48(char) = Constant[1] : -# 578| mu0_49(char) = Store : &:r0_47, r0_48 -# 579| r0_50(glval) = VariableAddress[f] : -# 579| mu0_51(char[3]) = Uninitialized[f] : &:r0_50 -# 579| r0_52(int) = Constant[0] : -# 579| r0_53(glval) = PointerAdd[1] : r0_50, r0_52 -# 579| r0_54(char) = Constant[0] : -# 579| mu0_55(char) = Store : &:r0_53, r0_54 -# 579| r0_56(int) = Constant[1] : -# 579| r0_57(glval) = PointerAdd[1] : r0_50, r0_56 -# 579| r0_58(unknown[2]) = Constant[0] : -# 579| mu0_59(unknown[2]) = Store : &:r0_57, r0_58 -# 580| v0_60(void) = NoOp : -# 571| v0_61(void) = ReturnVoid : -# 571| v0_62(void) = UnmodeledUse : mu* -# 571| v0_63(void) = AliasedUse : ~mu0_2 -# 571| v0_64(void) = ExitFunction : +# 573| r0_13(glval) = StringConstant["foo"] : +# 573| r0_14(char[4]) = Load : &:r0_13, ~mu0_2 +# 573| mu0_15(char[4]) = Store : &:r0_12, r0_14 +# 574| r0_16(glval) = VariableAddress[a_infer] : +# 574| r0_17(glval) = StringConstant["blah"] : +# 574| r0_18(char[5]) = Load : &:r0_17, ~mu0_2 +# 574| mu0_19(char[5]) = Store : &:r0_16, r0_18 +# 575| r0_20(glval) = VariableAddress[b] : +# 575| mu0_21(char[2]) = Uninitialized[b] : &:r0_20 +# 576| r0_22(glval) = VariableAddress[c] : +# 576| mu0_23(char[2]) = Uninitialized[c] : &:r0_22 +# 576| r0_24(int) = Constant[0] : +# 576| r0_25(glval) = PointerAdd[1] : r0_22, r0_24 +# 576| r0_26(unknown[2]) = Constant[0] : +# 576| mu0_27(unknown[2]) = Store : &:r0_25, r0_26 +# 577| r0_28(glval) = VariableAddress[d] : +# 577| mu0_29(char[2]) = Uninitialized[d] : &:r0_28 +# 577| r0_30(int) = Constant[0] : +# 577| r0_31(glval) = PointerAdd[1] : r0_28, r0_30 +# 577| r0_32(char) = Constant[0] : +# 577| mu0_33(char) = Store : &:r0_31, r0_32 +# 577| r0_34(int) = Constant[1] : +# 577| r0_35(glval) = PointerAdd[1] : r0_28, r0_34 +# 577| r0_36(char) = Constant[0] : +# 577| mu0_37(char) = Store : &:r0_35, r0_36 +# 578| r0_38(glval) = VariableAddress[e] : +# 578| mu0_39(char[2]) = Uninitialized[e] : &:r0_38 +# 578| r0_40(int) = Constant[0] : +# 578| r0_41(glval) = PointerAdd[1] : r0_38, r0_40 +# 578| r0_42(char) = Constant[0] : +# 578| mu0_43(char) = Store : &:r0_41, r0_42 +# 578| r0_44(int) = Constant[1] : +# 578| r0_45(glval) = PointerAdd[1] : r0_38, r0_44 +# 578| r0_46(char) = Constant[1] : +# 578| mu0_47(char) = Store : &:r0_45, r0_46 +# 579| r0_48(glval) = VariableAddress[f] : +# 579| mu0_49(char[3]) = Uninitialized[f] : &:r0_48 +# 579| r0_50(int) = Constant[0] : +# 579| r0_51(glval) = PointerAdd[1] : r0_48, r0_50 +# 579| r0_52(char) = Constant[0] : +# 579| mu0_53(char) = Store : &:r0_51, r0_52 +# 579| r0_54(int) = Constant[1] : +# 579| r0_55(glval) = PointerAdd[1] : r0_48, r0_54 +# 579| r0_56(unknown[2]) = Constant[0] : +# 579| mu0_57(unknown[2]) = Store : &:r0_55, r0_56 +# 580| v0_58(void) = NoOp : +# 571| v0_59(void) = ReturnVoid : +# 571| v0_60(void) = UnmodeledUse : mu* +# 571| v0_61(void) = AliasedUse : ~mu0_2 +# 571| v0_62(void) = ExitFunction : # 584| void VarArgs() # 584| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected index bc2bea75e11..893f1a1dd19 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -887,61 +887,59 @@ ssa.cpp: # 214| m0_12(unknown[31]) = Store : &:r0_11, r0_9 # 214| m0_13(char[32]) = Chi : total:m0_8, partial:m0_12 # 215| r0_14(glval) = VariableAddress[a_nopad] : -# 215| m0_15(char[4]) = Uninitialized[a_nopad] : &:r0_14 -# 215| r0_16(glval) = StringConstant["foo"] : -# 215| r0_17(char[4]) = Load : &:r0_16, ~m0_1 -# 215| m0_18(char[4]) = Store : &:r0_14, r0_17 -# 216| r0_19(glval) = VariableAddress[a_infer] : -# 216| m0_20(char[5]) = Uninitialized[a_infer] : &:r0_19 -# 216| r0_21(glval) = StringConstant["blah"] : -# 216| r0_22(char[5]) = Load : &:r0_21, ~m0_1 -# 216| m0_23(char[5]) = Store : &:r0_19, r0_22 -# 217| r0_24(glval) = VariableAddress[b] : -# 217| m0_25(char[2]) = Uninitialized[b] : &:r0_24 -# 218| r0_26(glval) = VariableAddress[c] : -# 218| m0_27(char[2]) = Uninitialized[c] : &:r0_26 -# 218| r0_28(int) = Constant[0] : -# 218| r0_29(glval) = PointerAdd[1] : r0_26, r0_28 -# 218| r0_30(unknown[2]) = Constant[0] : -# 218| m0_31(unknown[2]) = Store : &:r0_29, r0_30 -# 219| r0_32(glval) = VariableAddress[d] : -# 219| m0_33(char[2]) = Uninitialized[d] : &:r0_32 -# 219| r0_34(int) = Constant[0] : -# 219| r0_35(glval) = PointerAdd[1] : r0_32, r0_34 -# 219| r0_36(char) = Constant[0] : -# 219| m0_37(char) = Store : &:r0_35, r0_36 -# 219| m0_38(char[2]) = Chi : total:m0_33, partial:m0_37 -# 219| r0_39(int) = Constant[1] : -# 219| r0_40(glval) = PointerAdd[1] : r0_32, r0_39 -# 219| r0_41(char) = Constant[0] : -# 219| m0_42(char) = Store : &:r0_40, r0_41 -# 219| m0_43(char[2]) = Chi : total:m0_38, partial:m0_42 -# 220| r0_44(glval) = VariableAddress[e] : -# 220| m0_45(char[2]) = Uninitialized[e] : &:r0_44 -# 220| r0_46(int) = Constant[0] : -# 220| r0_47(glval) = PointerAdd[1] : r0_44, r0_46 -# 220| r0_48(char) = Constant[0] : -# 220| m0_49(char) = Store : &:r0_47, r0_48 -# 220| m0_50(char[2]) = Chi : total:m0_45, partial:m0_49 -# 220| r0_51(int) = Constant[1] : -# 220| r0_52(glval) = PointerAdd[1] : r0_44, r0_51 -# 220| r0_53(char) = Constant[1] : -# 220| m0_54(char) = Store : &:r0_52, r0_53 -# 220| m0_55(char[2]) = Chi : total:m0_50, partial:m0_54 -# 221| r0_56(glval) = VariableAddress[f] : -# 221| m0_57(char[3]) = Uninitialized[f] : &:r0_56 -# 221| r0_58(int) = Constant[0] : -# 221| r0_59(glval) = PointerAdd[1] : r0_56, r0_58 -# 221| r0_60(char) = Constant[0] : -# 221| m0_61(char) = Store : &:r0_59, r0_60 -# 221| m0_62(char[3]) = Chi : total:m0_57, partial:m0_61 -# 221| r0_63(int) = Constant[1] : -# 221| r0_64(glval) = PointerAdd[1] : r0_56, r0_63 -# 221| r0_65(unknown[2]) = Constant[0] : -# 221| m0_66(unknown[2]) = Store : &:r0_64, r0_65 -# 221| m0_67(char[3]) = Chi : total:m0_62, partial:m0_66 -# 222| v0_68(void) = NoOp : -# 213| v0_69(void) = ReturnVoid : -# 213| v0_70(void) = UnmodeledUse : mu* -# 213| v0_71(void) = AliasedUse : ~m0_1 -# 213| v0_72(void) = ExitFunction : +# 215| r0_15(glval) = StringConstant["foo"] : +# 215| r0_16(char[4]) = Load : &:r0_15, ~m0_1 +# 215| m0_17(char[4]) = Store : &:r0_14, r0_16 +# 216| r0_18(glval) = VariableAddress[a_infer] : +# 216| r0_19(glval) = StringConstant["blah"] : +# 216| r0_20(char[5]) = Load : &:r0_19, ~m0_1 +# 216| m0_21(char[5]) = Store : &:r0_18, r0_20 +# 217| r0_22(glval) = VariableAddress[b] : +# 217| m0_23(char[2]) = Uninitialized[b] : &:r0_22 +# 218| r0_24(glval) = VariableAddress[c] : +# 218| m0_25(char[2]) = Uninitialized[c] : &:r0_24 +# 218| r0_26(int) = Constant[0] : +# 218| r0_27(glval) = PointerAdd[1] : r0_24, r0_26 +# 218| r0_28(unknown[2]) = Constant[0] : +# 218| m0_29(unknown[2]) = Store : &:r0_27, r0_28 +# 219| r0_30(glval) = VariableAddress[d] : +# 219| m0_31(char[2]) = Uninitialized[d] : &:r0_30 +# 219| r0_32(int) = Constant[0] : +# 219| r0_33(glval) = PointerAdd[1] : r0_30, r0_32 +# 219| r0_34(char) = Constant[0] : +# 219| m0_35(char) = Store : &:r0_33, r0_34 +# 219| m0_36(char[2]) = Chi : total:m0_31, partial:m0_35 +# 219| r0_37(int) = Constant[1] : +# 219| r0_38(glval) = PointerAdd[1] : r0_30, r0_37 +# 219| r0_39(char) = Constant[0] : +# 219| m0_40(char) = Store : &:r0_38, r0_39 +# 219| m0_41(char[2]) = Chi : total:m0_36, partial:m0_40 +# 220| r0_42(glval) = VariableAddress[e] : +# 220| m0_43(char[2]) = Uninitialized[e] : &:r0_42 +# 220| r0_44(int) = Constant[0] : +# 220| r0_45(glval) = PointerAdd[1] : r0_42, r0_44 +# 220| r0_46(char) = Constant[0] : +# 220| m0_47(char) = Store : &:r0_45, r0_46 +# 220| m0_48(char[2]) = Chi : total:m0_43, partial:m0_47 +# 220| r0_49(int) = Constant[1] : +# 220| r0_50(glval) = PointerAdd[1] : r0_42, r0_49 +# 220| r0_51(char) = Constant[1] : +# 220| m0_52(char) = Store : &:r0_50, r0_51 +# 220| m0_53(char[2]) = Chi : total:m0_48, partial:m0_52 +# 221| r0_54(glval) = VariableAddress[f] : +# 221| m0_55(char[3]) = Uninitialized[f] : &:r0_54 +# 221| r0_56(int) = Constant[0] : +# 221| r0_57(glval) = PointerAdd[1] : r0_54, r0_56 +# 221| r0_58(char) = Constant[0] : +# 221| m0_59(char) = Store : &:r0_57, r0_58 +# 221| m0_60(char[3]) = Chi : total:m0_55, partial:m0_59 +# 221| r0_61(int) = Constant[1] : +# 221| r0_62(glval) = PointerAdd[1] : r0_54, r0_61 +# 221| r0_63(unknown[2]) = Constant[0] : +# 221| m0_64(unknown[2]) = Store : &:r0_62, r0_63 +# 221| m0_65(char[3]) = Chi : total:m0_60, partial:m0_64 +# 222| v0_66(void) = NoOp : +# 213| v0_67(void) = ReturnVoid : +# 213| v0_68(void) = UnmodeledUse : mu* +# 213| v0_69(void) = AliasedUse : ~m0_1 +# 213| v0_70(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected index 93f27b13f02..0014e15c784 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected @@ -849,55 +849,53 @@ ssa.cpp: # 214| r0_10(glval) = PointerAdd[1] : r0_3, r0_9 # 214| mu0_11(unknown[31]) = Store : &:r0_10, r0_8 # 215| r0_12(glval) = VariableAddress[a_nopad] : -# 215| m0_13(char[4]) = Uninitialized[a_nopad] : &:r0_12 -# 215| r0_14(glval) = StringConstant["foo"] : -# 215| r0_15(char[4]) = Load : &:r0_14, ~mu0_2 -# 215| m0_16(char[4]) = Store : &:r0_12, r0_15 -# 216| r0_17(glval) = VariableAddress[a_infer] : -# 216| m0_18(char[5]) = Uninitialized[a_infer] : &:r0_17 -# 216| r0_19(glval) = StringConstant["blah"] : -# 216| r0_20(char[5]) = Load : &:r0_19, ~mu0_2 -# 216| m0_21(char[5]) = Store : &:r0_17, r0_20 -# 217| r0_22(glval) = VariableAddress[b] : -# 217| m0_23(char[2]) = Uninitialized[b] : &:r0_22 -# 218| r0_24(glval) = VariableAddress[c] : -# 218| mu0_25(char[2]) = Uninitialized[c] : &:r0_24 -# 218| r0_26(int) = Constant[0] : -# 218| r0_27(glval) = PointerAdd[1] : r0_24, r0_26 -# 218| r0_28(unknown[2]) = Constant[0] : -# 218| mu0_29(unknown[2]) = Store : &:r0_27, r0_28 -# 219| r0_30(glval) = VariableAddress[d] : -# 219| mu0_31(char[2]) = Uninitialized[d] : &:r0_30 -# 219| r0_32(int) = Constant[0] : -# 219| r0_33(glval) = PointerAdd[1] : r0_30, r0_32 -# 219| r0_34(char) = Constant[0] : -# 219| mu0_35(char) = Store : &:r0_33, r0_34 -# 219| r0_36(int) = Constant[1] : -# 219| r0_37(glval) = PointerAdd[1] : r0_30, r0_36 -# 219| r0_38(char) = Constant[0] : -# 219| mu0_39(char) = Store : &:r0_37, r0_38 -# 220| r0_40(glval) = VariableAddress[e] : -# 220| mu0_41(char[2]) = Uninitialized[e] : &:r0_40 -# 220| r0_42(int) = Constant[0] : -# 220| r0_43(glval) = PointerAdd[1] : r0_40, r0_42 -# 220| r0_44(char) = Constant[0] : -# 220| mu0_45(char) = Store : &:r0_43, r0_44 -# 220| r0_46(int) = Constant[1] : -# 220| r0_47(glval) = PointerAdd[1] : r0_40, r0_46 -# 220| r0_48(char) = Constant[1] : -# 220| mu0_49(char) = Store : &:r0_47, r0_48 -# 221| r0_50(glval) = VariableAddress[f] : -# 221| mu0_51(char[3]) = Uninitialized[f] : &:r0_50 -# 221| r0_52(int) = Constant[0] : -# 221| r0_53(glval) = PointerAdd[1] : r0_50, r0_52 -# 221| r0_54(char) = Constant[0] : -# 221| mu0_55(char) = Store : &:r0_53, r0_54 -# 221| r0_56(int) = Constant[1] : -# 221| r0_57(glval) = PointerAdd[1] : r0_50, r0_56 -# 221| r0_58(unknown[2]) = Constant[0] : -# 221| mu0_59(unknown[2]) = Store : &:r0_57, r0_58 -# 222| v0_60(void) = NoOp : -# 213| v0_61(void) = ReturnVoid : -# 213| v0_62(void) = UnmodeledUse : mu* -# 213| v0_63(void) = AliasedUse : ~mu0_2 -# 213| v0_64(void) = ExitFunction : +# 215| r0_13(glval) = StringConstant["foo"] : +# 215| r0_14(char[4]) = Load : &:r0_13, ~mu0_2 +# 215| m0_15(char[4]) = Store : &:r0_12, r0_14 +# 216| r0_16(glval) = VariableAddress[a_infer] : +# 216| r0_17(glval) = StringConstant["blah"] : +# 216| r0_18(char[5]) = Load : &:r0_17, ~mu0_2 +# 216| m0_19(char[5]) = Store : &:r0_16, r0_18 +# 217| r0_20(glval) = VariableAddress[b] : +# 217| m0_21(char[2]) = Uninitialized[b] : &:r0_20 +# 218| r0_22(glval) = VariableAddress[c] : +# 218| mu0_23(char[2]) = Uninitialized[c] : &:r0_22 +# 218| r0_24(int) = Constant[0] : +# 218| r0_25(glval) = PointerAdd[1] : r0_22, r0_24 +# 218| r0_26(unknown[2]) = Constant[0] : +# 218| mu0_27(unknown[2]) = Store : &:r0_25, r0_26 +# 219| r0_28(glval) = VariableAddress[d] : +# 219| mu0_29(char[2]) = Uninitialized[d] : &:r0_28 +# 219| r0_30(int) = Constant[0] : +# 219| r0_31(glval) = PointerAdd[1] : r0_28, r0_30 +# 219| r0_32(char) = Constant[0] : +# 219| mu0_33(char) = Store : &:r0_31, r0_32 +# 219| r0_34(int) = Constant[1] : +# 219| r0_35(glval) = PointerAdd[1] : r0_28, r0_34 +# 219| r0_36(char) = Constant[0] : +# 219| mu0_37(char) = Store : &:r0_35, r0_36 +# 220| r0_38(glval) = VariableAddress[e] : +# 220| mu0_39(char[2]) = Uninitialized[e] : &:r0_38 +# 220| r0_40(int) = Constant[0] : +# 220| r0_41(glval) = PointerAdd[1] : r0_38, r0_40 +# 220| r0_42(char) = Constant[0] : +# 220| mu0_43(char) = Store : &:r0_41, r0_42 +# 220| r0_44(int) = Constant[1] : +# 220| r0_45(glval) = PointerAdd[1] : r0_38, r0_44 +# 220| r0_46(char) = Constant[1] : +# 220| mu0_47(char) = Store : &:r0_45, r0_46 +# 221| r0_48(glval) = VariableAddress[f] : +# 221| mu0_49(char[3]) = Uninitialized[f] : &:r0_48 +# 221| r0_50(int) = Constant[0] : +# 221| r0_51(glval) = PointerAdd[1] : r0_48, r0_50 +# 221| r0_52(char) = Constant[0] : +# 221| mu0_53(char) = Store : &:r0_51, r0_52 +# 221| r0_54(int) = Constant[1] : +# 221| r0_55(glval) = PointerAdd[1] : r0_48, r0_54 +# 221| r0_56(unknown[2]) = Constant[0] : +# 221| mu0_57(unknown[2]) = Store : &:r0_55, r0_56 +# 222| v0_58(void) = NoOp : +# 213| v0_59(void) = ReturnVoid : +# 213| v0_60(void) = UnmodeledUse : mu* +# 213| v0_61(void) = AliasedUse : ~mu0_2 +# 213| v0_62(void) = ExitFunction :