Skip to content

Commit ea7602b

Browse files
author
Robert Marsh
committed
C++: add test for Alias and SideEffect models
1 parent ba4812c commit ea7602b

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -758,3 +758,45 @@ ssa.cpp:
758758
# 184| v0_22(void) = ReturnVoid :
759759
# 184| v0_23(void) = UnmodeledUse : mu*
760760
# 184| v0_24(void) = ExitFunction :
761+
762+
# 197| int PureFunctions(char*, char*, int)
763+
# 197| Block 0
764+
# 197| v0_0(void) = EnterFunction :
765+
# 197| m0_1(unknown) = AliasedDefinition :
766+
# 197| mu0_2(unknown) = UnmodeledDefinition :
767+
# 197| r0_3(glval<char *>) = VariableAddress[str1] :
768+
# 197| m0_4(char *) = InitializeParameter[str1] : &:r0_3
769+
# 197| r0_5(glval<char *>) = VariableAddress[str2] :
770+
# 197| m0_6(char *) = InitializeParameter[str2] : &:r0_5
771+
# 197| r0_7(glval<int>) = VariableAddress[x] :
772+
# 197| m0_8(int) = InitializeParameter[x] : &:r0_7
773+
# 198| r0_9(glval<int>) = VariableAddress[ret] :
774+
# 198| r0_10(glval<unknown>) = FunctionAddress[strcmp] :
775+
# 198| r0_11(glval<char *>) = VariableAddress[str1] :
776+
# 198| r0_12(char *) = Load : &:r0_11, m0_4
777+
# 198| r0_13(char *) = Convert : r0_12
778+
# 198| r0_14(glval<char *>) = VariableAddress[str2] :
779+
# 198| r0_15(char *) = Load : &:r0_14, m0_6
780+
# 198| r0_16(char *) = Convert : r0_15
781+
# 198| r0_17(int) = Call : func:r0_10, 0:r0_13, 1:r0_16
782+
# 198| m0_18(unknown) = ^CallSideEffect : ~m0_1
783+
# 198| m0_19(unknown) = Chi : total:m0_1, partial:m0_18
784+
# 198| m0_20(int) = Store : &:r0_9, r0_17
785+
# 199| r0_21(glval<unknown>) = FunctionAddress[abs] :
786+
# 199| r0_22(glval<int>) = VariableAddress[x] :
787+
# 199| r0_23(int) = Load : &:r0_22, m0_8
788+
# 199| r0_24(int) = Call : func:r0_21, 0:r0_23
789+
# 199| m0_25(unknown) = ^CallSideEffect : ~m0_19
790+
# 199| m0_26(unknown) = Chi : total:m0_19, partial:m0_25
791+
# 199| r0_27(glval<int>) = VariableAddress[ret] :
792+
# 199| r0_28(int) = Load : &:r0_27, m0_20
793+
# 199| r0_29(int) = Add : r0_28, r0_24
794+
# 199| m0_30(int) = Store : &:r0_27, r0_29
795+
# 200| r0_31(glval<int>) = VariableAddress[#return] :
796+
# 200| r0_32(glval<int>) = VariableAddress[ret] :
797+
# 200| r0_33(int) = Load : &:r0_32, m0_30
798+
# 200| m0_34(int) = Store : &:r0_31, r0_33
799+
# 197| r0_35(glval<int>) = VariableAddress[#return] :
800+
# 197| v0_36(void) = ReturnValue : &:r0_35, m0_34
801+
# 197| v0_37(void) = UnmodeledUse : mu*
802+
# 197| v0_38(void) = ExitFunction :

cpp/ql/test/library-tests/ir/ssa/ssa.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,13 @@ static void AsmStmtWithOutputs(unsigned int& a, unsigned int& b, unsigned int& c
189189
: "+a" (a), "+b" (b)
190190
: "c" (c), "d" (d)
191191
);
192+
}
193+
194+
int strcmp(const char *, const char *);
195+
int abs(int);
196+
197+
int PureFunctions(char *str1, char *str2, int x) {
198+
int ret = strcmp(str1, str2);
199+
ret += abs(x);
200+
return ret;
192201
}

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,3 +724,43 @@ ssa.cpp:
724724
# 184| v0_17(void) = ReturnVoid :
725725
# 184| v0_18(void) = UnmodeledUse : mu*
726726
# 184| v0_19(void) = ExitFunction :
727+
728+
# 197| int PureFunctions(char*, char*, int)
729+
# 197| Block 0
730+
# 197| v0_0(void) = EnterFunction :
731+
# 197| mu0_1(unknown) = AliasedDefinition :
732+
# 197| mu0_2(unknown) = UnmodeledDefinition :
733+
# 197| r0_3(glval<char *>) = VariableAddress[str1] :
734+
# 197| m0_4(char *) = InitializeParameter[str1] : &:r0_3
735+
# 197| r0_5(glval<char *>) = VariableAddress[str2] :
736+
# 197| m0_6(char *) = InitializeParameter[str2] : &:r0_5
737+
# 197| r0_7(glval<int>) = VariableAddress[x] :
738+
# 197| m0_8(int) = InitializeParameter[x] : &:r0_7
739+
# 198| r0_9(glval<int>) = VariableAddress[ret] :
740+
# 198| r0_10(glval<unknown>) = FunctionAddress[strcmp] :
741+
# 198| r0_11(glval<char *>) = VariableAddress[str1] :
742+
# 198| r0_12(char *) = Load : &:r0_11, m0_4
743+
# 198| r0_13(char *) = Convert : r0_12
744+
# 198| r0_14(glval<char *>) = VariableAddress[str2] :
745+
# 198| r0_15(char *) = Load : &:r0_14, m0_6
746+
# 198| r0_16(char *) = Convert : r0_15
747+
# 198| r0_17(int) = Call : func:r0_10, 0:r0_13, 1:r0_16
748+
# 198| mu0_18(unknown) = ^CallSideEffect : ~mu0_2
749+
# 198| m0_19(int) = Store : &:r0_9, r0_17
750+
# 199| r0_20(glval<unknown>) = FunctionAddress[abs] :
751+
# 199| r0_21(glval<int>) = VariableAddress[x] :
752+
# 199| r0_22(int) = Load : &:r0_21, m0_8
753+
# 199| r0_23(int) = Call : func:r0_20, 0:r0_22
754+
# 199| mu0_24(unknown) = ^CallSideEffect : ~mu0_2
755+
# 199| r0_25(glval<int>) = VariableAddress[ret] :
756+
# 199| r0_26(int) = Load : &:r0_25, m0_19
757+
# 199| r0_27(int) = Add : r0_26, r0_23
758+
# 199| m0_28(int) = Store : &:r0_25, r0_27
759+
# 200| r0_29(glval<int>) = VariableAddress[#return] :
760+
# 200| r0_30(glval<int>) = VariableAddress[ret] :
761+
# 200| r0_31(int) = Load : &:r0_30, m0_28
762+
# 200| m0_32(int) = Store : &:r0_29, r0_31
763+
# 197| r0_33(glval<int>) = VariableAddress[#return] :
764+
# 197| v0_34(void) = ReturnValue : &:r0_33, m0_32
765+
# 197| v0_35(void) = UnmodeledUse : mu*
766+
# 197| v0_36(void) = ExitFunction :

0 commit comments

Comments
 (0)