mirror of
https://github.com/github/codeql.git
synced 2025-12-22 03:36:30 +01:00
Merge branch 'master' of github.com:Semmle/ql into rdmarsh/cpp/ir-constructor-side-effects
This commit is contained in:
@@ -121,7 +121,8 @@ abstract class TranslatedVariableDeclaration extends TranslatedElement, Initiali
|
||||
private predicate hasUninitializedInstruction() {
|
||||
not exists(getInitialization()) or
|
||||
getInitialization() instanceof TranslatedListInitialization or
|
||||
getInitialization() instanceof TranslatedConstructorInitialization
|
||||
getInitialization() instanceof TranslatedConstructorInitialization or
|
||||
getInitialization().(TranslatedStringLiteralInitialization).zeroInitRange(_, _)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2700,64 +2700,65 @@ ir.cpp:
|
||||
# 571| mu0_1(unknown) = AliasedDefinition :
|
||||
# 571| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 572| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
|
||||
# 572| r0_4(glval<char[1]>) = StringConstant[""] :
|
||||
# 572| r0_5(char[1]) = Load : &:r0_4, ~mu0_2
|
||||
# 572| mu0_6(char[1]) = Store : &:r0_3, r0_5
|
||||
# 572| r0_7(unknown[31]) = Constant[0] :
|
||||
# 572| r0_8(int) = Constant[1] :
|
||||
# 572| r0_9(glval<char>) = PointerAdd[1] : r0_3, r0_8
|
||||
# 572| mu0_10(unknown[31]) = Store : &:r0_9, r0_7
|
||||
# 573| r0_11(glval<char[4]>) = VariableAddress[a_nopad] :
|
||||
# 573| r0_12(glval<char[4]>) = StringConstant["foo"] :
|
||||
# 573| r0_13(char[4]) = Load : &:r0_12, ~mu0_2
|
||||
# 573| mu0_14(char[4]) = Store : &:r0_11, r0_13
|
||||
# 574| r0_15(glval<char[5]>) = VariableAddress[a_infer] :
|
||||
# 574| r0_16(glval<char[5]>) = StringConstant["blah"] :
|
||||
# 574| r0_17(char[5]) = Load : &:r0_16, ~mu0_2
|
||||
# 574| mu0_18(char[5]) = Store : &:r0_15, r0_17
|
||||
# 575| r0_19(glval<char[2]>) = VariableAddress[b] :
|
||||
# 575| mu0_20(char[2]) = Uninitialized[b] : &:r0_19
|
||||
# 576| r0_21(glval<char[2]>) = VariableAddress[c] :
|
||||
# 576| mu0_22(char[2]) = Uninitialized[c] : &:r0_21
|
||||
# 576| r0_23(int) = Constant[0] :
|
||||
# 576| r0_24(glval<char>) = PointerAdd[1] : r0_21, r0_23
|
||||
# 576| r0_25(unknown[2]) = Constant[0] :
|
||||
# 576| mu0_26(unknown[2]) = Store : &:r0_24, r0_25
|
||||
# 577| r0_27(glval<char[2]>) = VariableAddress[d] :
|
||||
# 577| mu0_28(char[2]) = Uninitialized[d] : &:r0_27
|
||||
# 577| r0_29(int) = Constant[0] :
|
||||
# 577| r0_30(glval<char>) = PointerAdd[1] : r0_27, r0_29
|
||||
# 577| r0_31(char) = Constant[0] :
|
||||
# 577| mu0_32(char) = Store : &:r0_30, r0_31
|
||||
# 577| r0_33(int) = Constant[1] :
|
||||
# 577| r0_34(glval<char>) = PointerAdd[1] : r0_27, r0_33
|
||||
# 577| r0_35(char) = Constant[0] :
|
||||
# 577| mu0_36(char) = Store : &:r0_34, r0_35
|
||||
# 578| r0_37(glval<char[2]>) = VariableAddress[e] :
|
||||
# 578| mu0_38(char[2]) = Uninitialized[e] : &:r0_37
|
||||
# 578| r0_39(int) = Constant[0] :
|
||||
# 578| r0_40(glval<char>) = PointerAdd[1] : r0_37, r0_39
|
||||
# 578| r0_41(char) = Constant[0] :
|
||||
# 578| mu0_42(char) = Store : &:r0_40, r0_41
|
||||
# 578| r0_43(int) = Constant[1] :
|
||||
# 578| r0_44(glval<char>) = PointerAdd[1] : r0_37, r0_43
|
||||
# 578| r0_45(char) = Constant[1] :
|
||||
# 578| mu0_46(char) = Store : &:r0_44, r0_45
|
||||
# 579| r0_47(glval<char[3]>) = VariableAddress[f] :
|
||||
# 579| mu0_48(char[3]) = Uninitialized[f] : &:r0_47
|
||||
# 579| r0_49(int) = Constant[0] :
|
||||
# 579| r0_50(glval<char>) = PointerAdd[1] : r0_47, r0_49
|
||||
# 579| r0_51(char) = Constant[0] :
|
||||
# 579| mu0_52(char) = Store : &:r0_50, r0_51
|
||||
# 579| r0_53(int) = Constant[1] :
|
||||
# 579| r0_54(glval<char>) = PointerAdd[1] : r0_47, r0_53
|
||||
# 579| r0_55(unknown[2]) = Constant[0] :
|
||||
# 579| mu0_56(unknown[2]) = Store : &:r0_54, r0_55
|
||||
# 580| v0_57(void) = NoOp :
|
||||
# 571| v0_58(void) = ReturnVoid :
|
||||
# 571| v0_59(void) = UnmodeledUse : mu*
|
||||
# 571| v0_60(void) = AliasedUse : ~mu0_2
|
||||
# 571| v0_61(void) = ExitFunction :
|
||||
# 572| mu0_4(char[32]) = Uninitialized[a_pad] : &:r0_3
|
||||
# 572| r0_5(glval<char[1]>) = StringConstant[""] :
|
||||
# 572| r0_6(char[1]) = Load : &:r0_5, ~mu0_2
|
||||
# 572| mu0_7(char[1]) = Store : &:r0_3, r0_6
|
||||
# 572| r0_8(unknown[31]) = Constant[0] :
|
||||
# 572| r0_9(int) = Constant[1] :
|
||||
# 572| r0_10(glval<char>) = PointerAdd[1] : r0_3, r0_9
|
||||
# 572| mu0_11(unknown[31]) = Store : &:r0_10, r0_8
|
||||
# 573| r0_12(glval<char[4]>) = VariableAddress[a_nopad] :
|
||||
# 573| r0_13(glval<char[4]>) = 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<char[5]>) = VariableAddress[a_infer] :
|
||||
# 574| r0_17(glval<char[5]>) = 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<char[2]>) = VariableAddress[b] :
|
||||
# 575| mu0_21(char[2]) = Uninitialized[b] : &:r0_20
|
||||
# 576| r0_22(glval<char[2]>) = VariableAddress[c] :
|
||||
# 576| mu0_23(char[2]) = Uninitialized[c] : &:r0_22
|
||||
# 576| r0_24(int) = Constant[0] :
|
||||
# 576| r0_25(glval<char>) = 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<char[2]>) = VariableAddress[d] :
|
||||
# 577| mu0_29(char[2]) = Uninitialized[d] : &:r0_28
|
||||
# 577| r0_30(int) = Constant[0] :
|
||||
# 577| r0_31(glval<char>) = 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<char>) = 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<char[2]>) = VariableAddress[e] :
|
||||
# 578| mu0_39(char[2]) = Uninitialized[e] : &:r0_38
|
||||
# 578| r0_40(int) = Constant[0] :
|
||||
# 578| r0_41(glval<char>) = 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<char>) = 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<char[3]>) = VariableAddress[f] :
|
||||
# 579| mu0_49(char[3]) = Uninitialized[f] : &:r0_48
|
||||
# 579| r0_50(int) = Constant[0] :
|
||||
# 579| r0_51(glval<char>) = 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<char>) = 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
|
||||
|
||||
@@ -878,81 +878,155 @@ ssa.cpp:
|
||||
# 207| v0_28(void) = AliasedUse : ~m0_1
|
||||
# 207| v0_29(void) = ExitFunction :
|
||||
|
||||
# 215| void Constructible::Constructible(int)
|
||||
# 215| Block 0
|
||||
# 215| v0_0(void) = EnterFunction :
|
||||
# 215| m0_1(unknown) = AliasedDefinition :
|
||||
# 215| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 215| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 215| r0_4(glval<int>) = VariableAddress[x] :
|
||||
# 215| m0_5(int) = InitializeParameter[x] : &:r0_4
|
||||
# 215| v0_6(void) = NoOp :
|
||||
# 215| v0_7(void) = ReturnVoid :
|
||||
# 215| v0_8(void) = UnmodeledUse : mu*
|
||||
# 215| v0_9(void) = AliasedUse : ~m0_1
|
||||
# 215| v0_10(void) = ExitFunction :
|
||||
# 213| void InitArray()
|
||||
# 213| Block 0
|
||||
# 213| v0_0(void) = EnterFunction :
|
||||
# 213| m0_1(unknown) = AliasedDefinition :
|
||||
# 213| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 214| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
|
||||
# 214| m0_4(char[32]) = Uninitialized[a_pad] : &:r0_3
|
||||
# 214| r0_5(glval<char[1]>) = StringConstant[""] :
|
||||
# 214| r0_6(char[1]) = Load : &:r0_5, ~m0_1
|
||||
# 214| m0_7(char[1]) = Store : &:r0_3, r0_6
|
||||
# 214| m0_8(char[32]) = Chi : total:m0_4, partial:m0_7
|
||||
# 214| r0_9(unknown[31]) = Constant[0] :
|
||||
# 214| r0_10(int) = Constant[1] :
|
||||
# 214| r0_11(glval<char>) = PointerAdd[1] : r0_3, r0_10
|
||||
# 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<char[4]>) = VariableAddress[a_nopad] :
|
||||
# 215| r0_15(glval<char[4]>) = 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<char[5]>) = VariableAddress[a_infer] :
|
||||
# 216| r0_19(glval<char[5]>) = 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<char[2]>) = VariableAddress[b] :
|
||||
# 217| m0_23(char[2]) = Uninitialized[b] : &:r0_22
|
||||
# 218| r0_24(glval<char[2]>) = VariableAddress[c] :
|
||||
# 218| m0_25(char[2]) = Uninitialized[c] : &:r0_24
|
||||
# 218| r0_26(int) = Constant[0] :
|
||||
# 218| r0_27(glval<char>) = 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<char[2]>) = VariableAddress[d] :
|
||||
# 219| m0_31(char[2]) = Uninitialized[d] : &:r0_30
|
||||
# 219| r0_32(int) = Constant[0] :
|
||||
# 219| r0_33(glval<char>) = 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<char>) = 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<char[2]>) = VariableAddress[e] :
|
||||
# 220| m0_43(char[2]) = Uninitialized[e] : &:r0_42
|
||||
# 220| r0_44(int) = Constant[0] :
|
||||
# 220| r0_45(glval<char>) = 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<char>) = 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<char[3]>) = VariableAddress[f] :
|
||||
# 221| m0_55(char[3]) = Uninitialized[f] : &:r0_54
|
||||
# 221| r0_56(int) = Constant[0] :
|
||||
# 221| r0_57(glval<char>) = 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<char>) = 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 :
|
||||
|
||||
# 216| void Constructible::g()
|
||||
# 216| Block 0
|
||||
# 216| v0_0(void) = EnterFunction :
|
||||
# 216| m0_1(unknown) = AliasedDefinition :
|
||||
# 216| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 216| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 216| v0_4(void) = NoOp :
|
||||
# 216| v0_5(void) = ReturnVoid :
|
||||
# 216| v0_6(void) = UnmodeledUse : mu*
|
||||
# 216| v0_7(void) = AliasedUse : ~m0_1
|
||||
# 216| v0_8(void) = ExitFunction :
|
||||
# 226| void Constructible::Constructible(int)
|
||||
# 226| Block 0
|
||||
# 226| v0_0(void) = EnterFunction :
|
||||
# 226| m0_1(unknown) = AliasedDefinition :
|
||||
# 226| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 226| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 226| r0_4(glval<int>) = VariableAddress[x] :
|
||||
# 226| m0_5(int) = InitializeParameter[x] : &:r0_4
|
||||
# 226| v0_6(void) = NoOp :
|
||||
# 226| v0_7(void) = ReturnVoid :
|
||||
# 226| v0_8(void) = UnmodeledUse : mu*
|
||||
# 226| v0_9(void) = AliasedUse : ~m0_1
|
||||
# 226| v0_10(void) = ExitFunction :
|
||||
|
||||
# 219| void ExplicitConstructorCalls()
|
||||
# 219| Block 0
|
||||
# 219| v0_0(void) = EnterFunction :
|
||||
# 219| m0_1(unknown) = AliasedDefinition :
|
||||
# 219| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 220| r0_3(glval<Constructible>) = VariableAddress[c] :
|
||||
# 220| m0_4(Constructible) = Uninitialized[c] : &:r0_3
|
||||
# 220| r0_5(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 220| r0_6(int) = Constant[1] :
|
||||
# 220| v0_7(void) = Call : func:r0_5, this:r0_3, 0:r0_6
|
||||
# 220| m0_8(unknown) = ^CallSideEffect : ~m0_1
|
||||
# 220| m0_9(unknown) = Chi : total:m0_1, partial:m0_8
|
||||
# 220| m0_10(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_3
|
||||
# 220| m0_11(Constructible) = Chi : total:m0_4, partial:m0_10
|
||||
# 221| r0_12(glval<Constructible>) = VariableAddress[c] :
|
||||
# 221| r0_13(glval<unknown>) = FunctionAddress[g] :
|
||||
# 221| v0_14(void) = Call : func:r0_13, this:r0_12
|
||||
# 221| m0_15(unknown) = ^CallSideEffect : ~m0_9
|
||||
# 221| m0_16(unknown) = Chi : total:m0_9, partial:m0_15
|
||||
# 221| v0_17(void) = ^BufferReadSideEffect[-1] : &:r0_12, ~m0_11
|
||||
# 221| m0_18(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_12
|
||||
# 221| m0_19(Constructible) = Chi : total:m0_11, partial:m0_18
|
||||
# 222| r0_20(glval<Constructible>) = VariableAddress[c] :
|
||||
# 222| r0_21(glval<unknown>) = FunctionAddress[g] :
|
||||
# 222| v0_22(void) = Call : func:r0_21, this:r0_20
|
||||
# 222| m0_23(unknown) = ^CallSideEffect : ~m0_16
|
||||
# 222| m0_24(unknown) = Chi : total:m0_16, partial:m0_23
|
||||
# 222| v0_25(void) = ^BufferReadSideEffect[-1] : &:r0_20, ~m0_19
|
||||
# 222| m0_26(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_20
|
||||
# 222| m0_27(Constructible) = Chi : total:m0_19, partial:m0_26
|
||||
# 223| r0_28(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 223| m0_29(Constructible) = Uninitialized[c2] : &:r0_28
|
||||
# 223| r0_30(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 223| r0_31(int) = Constant[2] :
|
||||
# 223| v0_32(void) = Call : func:r0_30, this:r0_28, 0:r0_31
|
||||
# 223| m0_33(unknown) = ^CallSideEffect : ~m0_24
|
||||
# 223| m0_34(unknown) = Chi : total:m0_24, partial:m0_33
|
||||
# 223| m0_35(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_28
|
||||
# 223| m0_36(Constructible) = Chi : total:m0_29, partial:m0_35
|
||||
# 224| r0_37(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 224| r0_38(glval<unknown>) = FunctionAddress[g] :
|
||||
# 224| v0_39(void) = Call : func:r0_38, this:r0_37
|
||||
# 224| m0_40(unknown) = ^CallSideEffect : ~m0_34
|
||||
# 224| m0_41(unknown) = Chi : total:m0_34, partial:m0_40
|
||||
# 224| v0_42(void) = ^BufferReadSideEffect[-1] : &:r0_37, ~m0_36
|
||||
# 224| m0_43(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_37
|
||||
# 224| m0_44(Constructible) = Chi : total:m0_36, partial:m0_43
|
||||
# 225| v0_45(void) = NoOp :
|
||||
# 219| v0_46(void) = ReturnVoid :
|
||||
# 219| v0_47(void) = UnmodeledUse : mu*
|
||||
# 219| v0_48(void) = AliasedUse : ~m0_41
|
||||
# 219| v0_49(void) = ExitFunction :
|
||||
# 227| void Constructible::g()
|
||||
# 227| Block 0
|
||||
# 227| v0_0(void) = EnterFunction :
|
||||
# 227| m0_1(unknown) = AliasedDefinition :
|
||||
# 227| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 227| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 227| v0_4(void) = NoOp :
|
||||
# 227| v0_5(void) = ReturnVoid :
|
||||
# 227| v0_6(void) = UnmodeledUse : mu*
|
||||
# 227| v0_7(void) = AliasedUse : ~m0_1
|
||||
# 227| v0_8(void) = ExitFunction :
|
||||
|
||||
# 230| void ExplicitConstructorCalls()
|
||||
# 230| Block 0
|
||||
# 230| v0_0(void) = EnterFunction :
|
||||
# 230| m0_1(unknown) = AliasedDefinition :
|
||||
# 230| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 231| r0_3(glval<Constructible>) = VariableAddress[c] :
|
||||
# 231| m0_4(Constructible) = Uninitialized[c] : &:r0_3
|
||||
# 231| r0_5(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 231| r0_6(int) = Constant[1] :
|
||||
# 231| v0_7(void) = Call : func:r0_5, this:r0_3, 0:r0_6
|
||||
# 231| m0_8(unknown) = ^CallSideEffect : ~m0_1
|
||||
# 231| m0_9(unknown) = Chi : total:m0_1, partial:m0_8
|
||||
# 231| m0_10(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_3
|
||||
# 231| m0_11(Constructible) = Chi : total:m0_4, partial:m0_10
|
||||
# 232| r0_12(glval<Constructible>) = VariableAddress[c] :
|
||||
# 232| r0_13(glval<unknown>) = FunctionAddress[g] :
|
||||
# 232| v0_14(void) = Call : func:r0_13, this:r0_12
|
||||
# 232| m0_15(unknown) = ^CallSideEffect : ~m0_9
|
||||
# 232| m0_16(unknown) = Chi : total:m0_9, partial:m0_15
|
||||
# 232| v0_17(void) = ^BufferReadSideEffect[-1] : &:r0_12, ~m0_11
|
||||
# 232| m0_18(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_12
|
||||
# 232| m0_19(Constructible) = Chi : total:m0_11, partial:m0_18
|
||||
# 233| r0_20(glval<Constructible>) = VariableAddress[c] :
|
||||
# 233| r0_21(glval<unknown>) = FunctionAddress[g] :
|
||||
# 233| v0_22(void) = Call : func:r0_21, this:r0_20
|
||||
# 233| m0_23(unknown) = ^CallSideEffect : ~m0_16
|
||||
# 233| m0_24(unknown) = Chi : total:m0_16, partial:m0_23
|
||||
# 233| v0_25(void) = ^BufferReadSideEffect[-1] : &:r0_20, ~m0_19
|
||||
# 233| m0_26(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_20
|
||||
# 233| m0_27(Constructible) = Chi : total:m0_19, partial:m0_26
|
||||
# 234| r0_28(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 234| m0_29(Constructible) = Uninitialized[c2] : &:r0_28
|
||||
# 234| r0_30(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 234| r0_31(int) = Constant[2] :
|
||||
# 234| v0_32(void) = Call : func:r0_30, this:r0_28, 0:r0_31
|
||||
# 234| m0_33(unknown) = ^CallSideEffect : ~m0_24
|
||||
# 234| m0_34(unknown) = Chi : total:m0_24, partial:m0_33
|
||||
# 234| m0_35(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_28
|
||||
# 234| m0_36(Constructible) = Chi : total:m0_29, partial:m0_35
|
||||
# 235| r0_37(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 235| r0_38(glval<unknown>) = FunctionAddress[g] :
|
||||
# 235| v0_39(void) = Call : func:r0_38, this:r0_37
|
||||
# 235| m0_40(unknown) = ^CallSideEffect : ~m0_34
|
||||
# 235| m0_41(unknown) = Chi : total:m0_34, partial:m0_40
|
||||
# 235| v0_42(void) = ^BufferReadSideEffect[-1] : &:r0_37, ~m0_36
|
||||
# 235| m0_43(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_37
|
||||
# 235| m0_44(Constructible) = Chi : total:m0_36, partial:m0_43
|
||||
# 236| v0_45(void) = NoOp :
|
||||
# 230| v0_46(void) = ReturnVoid :
|
||||
# 230| v0_47(void) = UnmodeledUse : mu*
|
||||
# 230| v0_48(void) = AliasedUse : ~m0_41
|
||||
# 230| v0_49(void) = ExitFunction :
|
||||
|
||||
@@ -210,6 +210,17 @@ int ModeledCallTarget(int x) {
|
||||
return y;
|
||||
}
|
||||
|
||||
void InitArray() {
|
||||
char a_pad[32] = "";
|
||||
char a_nopad[4] = "foo";
|
||||
char a_infer[] = "blah";
|
||||
char b[2];
|
||||
char c[2] = {};
|
||||
char d[2] = { 0 };
|
||||
char e[2] = { 0, 1 };
|
||||
char f[3] = { 0 };
|
||||
}
|
||||
|
||||
class Constructible {
|
||||
public:
|
||||
Constructible(int x) {};
|
||||
|
||||
@@ -842,71 +842,137 @@ ssa.cpp:
|
||||
# 207| v0_25(void) = AliasedUse : ~mu0_2
|
||||
# 207| v0_26(void) = ExitFunction :
|
||||
|
||||
# 215| void Constructible::Constructible(int)
|
||||
# 215| Block 0
|
||||
# 215| v0_0(void) = EnterFunction :
|
||||
# 215| mu0_1(unknown) = AliasedDefinition :
|
||||
# 215| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 215| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 215| r0_4(glval<int>) = VariableAddress[x] :
|
||||
# 215| m0_5(int) = InitializeParameter[x] : &:r0_4
|
||||
# 215| v0_6(void) = NoOp :
|
||||
# 215| v0_7(void) = ReturnVoid :
|
||||
# 215| v0_8(void) = UnmodeledUse : mu*
|
||||
# 215| v0_9(void) = AliasedUse : ~mu0_2
|
||||
# 215| v0_10(void) = ExitFunction :
|
||||
# 213| void InitArray()
|
||||
# 213| Block 0
|
||||
# 213| v0_0(void) = EnterFunction :
|
||||
# 213| mu0_1(unknown) = AliasedDefinition :
|
||||
# 213| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 214| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
|
||||
# 214| mu0_4(char[32]) = Uninitialized[a_pad] : &:r0_3
|
||||
# 214| r0_5(glval<char[1]>) = StringConstant[""] :
|
||||
# 214| r0_6(char[1]) = Load : &:r0_5, ~mu0_2
|
||||
# 214| mu0_7(char[1]) = Store : &:r0_3, r0_6
|
||||
# 214| r0_8(unknown[31]) = Constant[0] :
|
||||
# 214| r0_9(int) = Constant[1] :
|
||||
# 214| r0_10(glval<char>) = PointerAdd[1] : r0_3, r0_9
|
||||
# 214| mu0_11(unknown[31]) = Store : &:r0_10, r0_8
|
||||
# 215| r0_12(glval<char[4]>) = VariableAddress[a_nopad] :
|
||||
# 215| r0_13(glval<char[4]>) = 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<char[5]>) = VariableAddress[a_infer] :
|
||||
# 216| r0_17(glval<char[5]>) = 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<char[2]>) = VariableAddress[b] :
|
||||
# 217| m0_21(char[2]) = Uninitialized[b] : &:r0_20
|
||||
# 218| r0_22(glval<char[2]>) = VariableAddress[c] :
|
||||
# 218| mu0_23(char[2]) = Uninitialized[c] : &:r0_22
|
||||
# 218| r0_24(int) = Constant[0] :
|
||||
# 218| r0_25(glval<char>) = 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<char[2]>) = VariableAddress[d] :
|
||||
# 219| mu0_29(char[2]) = Uninitialized[d] : &:r0_28
|
||||
# 219| r0_30(int) = Constant[0] :
|
||||
# 219| r0_31(glval<char>) = 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<char>) = 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<char[2]>) = VariableAddress[e] :
|
||||
# 220| mu0_39(char[2]) = Uninitialized[e] : &:r0_38
|
||||
# 220| r0_40(int) = Constant[0] :
|
||||
# 220| r0_41(glval<char>) = 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<char>) = 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<char[3]>) = VariableAddress[f] :
|
||||
# 221| mu0_49(char[3]) = Uninitialized[f] : &:r0_48
|
||||
# 221| r0_50(int) = Constant[0] :
|
||||
# 221| r0_51(glval<char>) = 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<char>) = 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 :
|
||||
|
||||
# 216| void Constructible::g()
|
||||
# 216| Block 0
|
||||
# 216| v0_0(void) = EnterFunction :
|
||||
# 216| mu0_1(unknown) = AliasedDefinition :
|
||||
# 216| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 216| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 216| v0_4(void) = NoOp :
|
||||
# 216| v0_5(void) = ReturnVoid :
|
||||
# 216| v0_6(void) = UnmodeledUse : mu*
|
||||
# 216| v0_7(void) = AliasedUse : ~mu0_2
|
||||
# 216| v0_8(void) = ExitFunction :
|
||||
# 226| void Constructible::Constructible(int)
|
||||
# 226| Block 0
|
||||
# 226| v0_0(void) = EnterFunction :
|
||||
# 226| mu0_1(unknown) = AliasedDefinition :
|
||||
# 226| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 226| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 226| r0_4(glval<int>) = VariableAddress[x] :
|
||||
# 226| m0_5(int) = InitializeParameter[x] : &:r0_4
|
||||
# 226| v0_6(void) = NoOp :
|
||||
# 226| v0_7(void) = ReturnVoid :
|
||||
# 226| v0_8(void) = UnmodeledUse : mu*
|
||||
# 226| v0_9(void) = AliasedUse : ~mu0_2
|
||||
# 226| v0_10(void) = ExitFunction :
|
||||
|
||||
# 219| void ExplicitConstructorCalls()
|
||||
# 219| Block 0
|
||||
# 219| v0_0(void) = EnterFunction :
|
||||
# 219| mu0_1(unknown) = AliasedDefinition :
|
||||
# 219| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 220| r0_3(glval<Constructible>) = VariableAddress[c] :
|
||||
# 220| mu0_4(Constructible) = Uninitialized[c] : &:r0_3
|
||||
# 220| r0_5(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 220| r0_6(int) = Constant[1] :
|
||||
# 220| v0_7(void) = Call : func:r0_5, this:r0_3, 0:r0_6
|
||||
# 220| mu0_8(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 220| mu0_9(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_3
|
||||
# 221| r0_10(glval<Constructible>) = VariableAddress[c] :
|
||||
# 221| r0_11(glval<unknown>) = FunctionAddress[g] :
|
||||
# 221| v0_12(void) = Call : func:r0_11, this:r0_10
|
||||
# 221| mu0_13(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 221| v0_14(void) = ^BufferReadSideEffect[-1] : &:r0_10, ~mu0_2
|
||||
# 221| mu0_15(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_10
|
||||
# 222| r0_16(glval<Constructible>) = VariableAddress[c] :
|
||||
# 222| r0_17(glval<unknown>) = FunctionAddress[g] :
|
||||
# 222| v0_18(void) = Call : func:r0_17, this:r0_16
|
||||
# 222| mu0_19(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 222| v0_20(void) = ^BufferReadSideEffect[-1] : &:r0_16, ~mu0_2
|
||||
# 222| mu0_21(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_16
|
||||
# 223| r0_22(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 223| mu0_23(Constructible) = Uninitialized[c2] : &:r0_22
|
||||
# 223| r0_24(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 223| r0_25(int) = Constant[2] :
|
||||
# 223| v0_26(void) = Call : func:r0_24, this:r0_22, 0:r0_25
|
||||
# 223| mu0_27(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 223| mu0_28(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_22
|
||||
# 224| r0_29(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 224| r0_30(glval<unknown>) = FunctionAddress[g] :
|
||||
# 224| v0_31(void) = Call : func:r0_30, this:r0_29
|
||||
# 224| mu0_32(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 224| v0_33(void) = ^BufferReadSideEffect[-1] : &:r0_29, ~mu0_2
|
||||
# 224| mu0_34(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_29
|
||||
# 225| v0_35(void) = NoOp :
|
||||
# 219| v0_36(void) = ReturnVoid :
|
||||
# 219| v0_37(void) = UnmodeledUse : mu*
|
||||
# 219| v0_38(void) = AliasedUse : ~mu0_2
|
||||
# 219| v0_39(void) = ExitFunction :
|
||||
# 227| void Constructible::g()
|
||||
# 227| Block 0
|
||||
# 227| v0_0(void) = EnterFunction :
|
||||
# 227| mu0_1(unknown) = AliasedDefinition :
|
||||
# 227| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 227| r0_3(glval<Constructible>) = InitializeThis :
|
||||
# 227| v0_4(void) = NoOp :
|
||||
# 227| v0_5(void) = ReturnVoid :
|
||||
# 227| v0_6(void) = UnmodeledUse : mu*
|
||||
# 227| v0_7(void) = AliasedUse : ~mu0_2
|
||||
# 227| v0_8(void) = ExitFunction :
|
||||
|
||||
# 230| void ExplicitConstructorCalls()
|
||||
# 230| Block 0
|
||||
# 230| v0_0(void) = EnterFunction :
|
||||
# 230| mu0_1(unknown) = AliasedDefinition :
|
||||
# 230| mu0_2(unknown) = UnmodeledDefinition :
|
||||
# 231| r0_3(glval<Constructible>) = VariableAddress[c] :
|
||||
# 231| mu0_4(Constructible) = Uninitialized[c] : &:r0_3
|
||||
# 231| r0_5(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 231| r0_6(int) = Constant[1] :
|
||||
# 231| v0_7(void) = Call : func:r0_5, this:r0_3, 0:r0_6
|
||||
# 231| mu0_8(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 231| mu0_9(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_3
|
||||
# 232| r0_10(glval<Constructible>) = VariableAddress[c] :
|
||||
# 232| r0_11(glval<unknown>) = FunctionAddress[g] :
|
||||
# 232| v0_12(void) = Call : func:r0_11, this:r0_10
|
||||
# 232| mu0_13(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 232| v0_14(void) = ^BufferReadSideEffect[-1] : &:r0_10, ~mu0_2
|
||||
# 232| mu0_15(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_10
|
||||
# 233| r0_16(glval<Constructible>) = VariableAddress[c] :
|
||||
# 233| r0_17(glval<unknown>) = FunctionAddress[g] :
|
||||
# 233| v0_18(void) = Call : func:r0_17, this:r0_16
|
||||
# 233| mu0_19(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 233| v0_20(void) = ^BufferReadSideEffect[-1] : &:r0_16, ~mu0_2
|
||||
# 233| mu0_21(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_16
|
||||
# 234| r0_22(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 234| mu0_23(Constructible) = Uninitialized[c2] : &:r0_22
|
||||
# 234| r0_24(glval<unknown>) = FunctionAddress[Constructible] :
|
||||
# 234| r0_25(int) = Constant[2] :
|
||||
# 234| v0_26(void) = Call : func:r0_24, this:r0_22, 0:r0_25
|
||||
# 234| mu0_27(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 234| mu0_28(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_22
|
||||
# 235| r0_29(glval<Constructible>) = VariableAddress[c2] :
|
||||
# 235| r0_30(glval<unknown>) = FunctionAddress[g] :
|
||||
# 235| v0_31(void) = Call : func:r0_30, this:r0_29
|
||||
# 235| mu0_32(unknown) = ^CallSideEffect : ~mu0_2
|
||||
# 235| v0_33(void) = ^BufferReadSideEffect[-1] : &:r0_29, ~mu0_2
|
||||
# 235| mu0_34(Constructible) = ^IndirectMayWriteSideEffect[-1] : &:r0_29
|
||||
# 236| v0_35(void) = NoOp :
|
||||
# 230| v0_36(void) = ReturnVoid :
|
||||
# 230| v0_37(void) = UnmodeledUse : mu*
|
||||
# 230| v0_38(void) = AliasedUse : ~mu0_2
|
||||
# 230| v0_39(void) = ExitFunction :
|
||||
|
||||
Reference in New Issue
Block a user