Skip to content

Commit a391f78

Browse files
committed
C++: Add a test.
1 parent 7a50d7a commit a391f78

File tree

6 files changed

+154
-0
lines changed

6 files changed

+154
-0
lines changed

cpp/ql/test/library-tests/ir/ir/PrintAST.expected

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,6 +1815,42 @@ ir.c:
18151815
# 15| Type = [CharPointerType] char *
18161816
# 15| ValueCategory = prvalue
18171817
# 16| getStmt(1): [ReturnStmt] return ...
1818+
# 18| [TopLevelFunction] void ExRaiseAccessViolation(int)
1819+
# 18| <params>:
1820+
# 18| getParameter(0): [Parameter] (unnamed parameter 0)
1821+
# 18| Type = [IntType] int
1822+
# 21| [TopLevelFunction] int TryExceptTest(int)
1823+
# 21| <params>:
1824+
# 21| getParameter(0): [Parameter] x
1825+
# 21| Type = [IntType] int
1826+
# 21| getEntryPoint(): [BlockStmt] { ... }
1827+
# 22| getStmt(0): [DeclStmt] declaration
1828+
# 22| getDeclarationEntry(0): [VariableDeclarationEntry] definition of localPtr
1829+
# 22| Type = [IntPointerType] int *
1830+
# 24| getStmt(1): [MicrosoftTryExceptStmt] __try { ... } __except( ... ) { ... }
1831+
# 24| getStmt(): [BlockStmt] { ... }
1832+
# 25| getStmt(0): [ExprStmt] ExprStmt
1833+
# 25| getExpr(): [FunctionCall] call to ExRaiseAccessViolation
1834+
# 25| Type = [VoidType] void
1835+
# 25| ValueCategory = prvalue
1836+
# 25| getArgument(0): [VariableAccess] x
1837+
# 25| Type = [IntType] int
1838+
# 25| ValueCategory = prvalue(load)
1839+
# 26| getCondition(): [Literal] 1
1840+
# 26| Type = [IntType] int
1841+
# 26| Value = [Literal] 1
1842+
# 26| ValueCategory = prvalue
1843+
# 26| getExcept(): [BlockStmt] { ... }
1844+
# 27| getStmt(0): [ReturnStmt] return ...
1845+
# 27| getExpr(): [Literal] 1
1846+
# 27| Type = [IntType] int
1847+
# 27| Value = [Literal] 1
1848+
# 27| ValueCategory = prvalue
1849+
# 29| getStmt(2): [ReturnStmt] return ...
1850+
# 29| getExpr(): [Literal] 0
1851+
# 29| Type = [IntType] int
1852+
# 29| Value = [Literal] 0
1853+
# 29| ValueCategory = prvalue
18181854
ir.cpp:
18191855
# 1| [TopLevelFunction] void Constants()
18201856
# 1| <params>:

cpp/ql/test/library-tests/ir/ir/aliased_ir.expected

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,33 @@ ir.c:
809809
# 13| v13_11(void) = AliasedUse : m13_3
810810
# 13| v13_12(void) = ExitFunction :
811811

812+
# 21| int TryExceptTest(int)
813+
# 21| Block 0
814+
# 21| v21_1(void) = EnterFunction :
815+
# 21| m21_2(unknown) = AliasedDefinition :
816+
# 21| m21_3(unknown) = InitializeNonLocal :
817+
# 21| m21_4(unknown) = Chi : total:m21_2, partial:m21_3
818+
# 21| r21_5(glval<int>) = VariableAddress[x] :
819+
# 21| m21_6(int) = InitializeParameter[x] : &:r21_5
820+
# 22| r22_1(glval<int *>) = VariableAddress[localPtr] :
821+
# 22| m22_2(int *) = Uninitialized[localPtr] : &:r22_1
822+
# 25| r25_1(glval<unknown>) = FunctionAddress[ExRaiseAccessViolation] :
823+
# 25| r25_2(glval<int>) = VariableAddress[x] :
824+
# 25| r25_3(int) = Load[x] : &:r25_2, m21_6
825+
# 25| v25_4(void) = Call[ExRaiseAccessViolation] : func:r25_1, 0:r25_3
826+
# 25| m25_5(unknown) = ^CallSideEffect : ~m21_4
827+
# 25| m25_6(unknown) = Chi : total:m21_4, partial:m25_5
828+
# 29| r29_1(glval<int>) = VariableAddress[#return] :
829+
# 29| r29_2(int) = Constant[0] :
830+
# 29| m29_3(int) = Store[#return] : &:r29_1, r29_2
831+
# 21| r21_7(glval<int>) = VariableAddress[#return] :
832+
# 21| v21_8(void) = ReturnValue : &:r21_7, m29_3
833+
# 21| v21_9(void) = AliasedUse : ~m25_6
834+
# 21| v21_10(void) = ExitFunction :
835+
836+
# 21| Block 1
837+
# 21| v21_11(void) = Unreached :
838+
812839
ir.cpp:
813840
# 1| void Constants()
814841
# 1| Block 0

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,18 @@ void CStyleCast(void *src)
1515
char *dst = (char*)src;
1616
}
1717

18+
void ExRaiseAccessViolation(int);
19+
#define EXCEPTION_EXECUTE_HANDLER 1
20+
21+
int TryExceptTest(int x) {
22+
int *localPtr;
23+
24+
__try {
25+
ExRaiseAccessViolation(x);
26+
} __except(EXCEPTION_EXECUTE_HANDLER) {
27+
return 1;
28+
}
29+
return 0;
30+
}
31+
1832
// semmle-extractor-options: --microsoft

cpp/ql/test/library-tests/ir/ir/operand_locations.expected

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,22 @@
10051005
| ir.c:15:24:15:26 | Address | &:r15_2 |
10061006
| ir.c:15:24:15:26 | Load | m13_6 |
10071007
| ir.c:15:24:15:26 | Unary | r15_3 |
1008+
| ir.c:21:5:21:17 | Address | &:r21_7 |
1009+
| ir.c:21:5:21:17 | ChiPartial | partial:m21_3 |
1010+
| ir.c:21:5:21:17 | ChiTotal | total:m21_2 |
1011+
| ir.c:21:5:21:17 | Load | m29_3 |
1012+
| ir.c:21:5:21:17 | SideEffect | ~m25_6 |
1013+
| ir.c:21:23:21:23 | Address | &:r21_5 |
1014+
| ir.c:22:8:22:15 | Address | &:r22_1 |
1015+
| ir.c:25:5:25:26 | CallTarget | func:r25_1 |
1016+
| ir.c:25:5:25:26 | ChiPartial | partial:m25_5 |
1017+
| ir.c:25:5:25:26 | ChiTotal | total:m21_4 |
1018+
| ir.c:25:5:25:26 | SideEffect | ~m21_4 |
1019+
| ir.c:25:28:25:28 | Address | &:r25_2 |
1020+
| ir.c:25:28:25:28 | Arg(0) | 0:r25_3 |
1021+
| ir.c:25:28:25:28 | Load | m21_6 |
1022+
| ir.c:29:3:29:11 | Address | &:r29_1 |
1023+
| ir.c:29:10:29:10 | StoreValue | r29_2 |
10081024
| ir.cpp:1:6:1:14 | ChiPartial | partial:m1_3 |
10091025
| ir.cpp:1:6:1:14 | ChiTotal | total:m1_2 |
10101026
| ir.cpp:1:6:1:14 | SideEffect | m1_3 |

cpp/ql/test/library-tests/ir/ir/raw_consistency.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ multipleIRTypes
2020
lostReachability
2121
backEdgeCountMismatch
2222
useNotDominatedByDefinition
23+
| ir.c:26:14:26:38 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | ir.c:21:5:21:17 | int TryExceptTest(int) | int TryExceptTest(int) |
24+
| ir.c:26:14:26:38 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | ir.c:21:5:21:17 | int TryExceptTest(int) | int TryExceptTest(int) |
2325
| ir.cpp:1486:8:1486:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1486:8:1486:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() |
2426
| try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
2527
| try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |

cpp/ql/test/library-tests/ir/ir/raw_ir.expected

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,65 @@ ir.c:
786786
# 13| v13_10(void) = AliasedUse : ~m?
787787
# 13| v13_11(void) = ExitFunction :
788788

789+
# 21| int TryExceptTest(int)
790+
# 21| Block 0
791+
# 21| v21_1(void) = EnterFunction :
792+
# 21| mu21_2(unknown) = AliasedDefinition :
793+
# 21| mu21_3(unknown) = InitializeNonLocal :
794+
# 21| r21_4(glval<int>) = VariableAddress[x] :
795+
# 21| mu21_5(int) = InitializeParameter[x] : &:r21_4
796+
# 22| r22_1(glval<int *>) = VariableAddress[localPtr] :
797+
# 22| mu22_2(int *) = Uninitialized[localPtr] : &:r22_1
798+
# 25| r25_1(glval<unknown>) = FunctionAddress[ExRaiseAccessViolation] :
799+
# 25| r25_2(glval<int>) = VariableAddress[x] :
800+
# 25| r25_3(int) = Load[x] : &:r25_2, ~m?
801+
# 25| v25_4(void) = Call[ExRaiseAccessViolation] : func:r25_1, 0:r25_3
802+
# 25| mu25_5(unknown) = ^CallSideEffect : ~m?
803+
#-----| Goto -> Block 7
804+
805+
# 21| Block 1
806+
# 21| r21_6(glval<int>) = VariableAddress[#return] :
807+
# 21| v21_7(void) = ReturnValue : &:r21_6, ~m?
808+
# 21| v21_8(void) = AliasedUse : ~m?
809+
# 21| v21_9(void) = ExitFunction :
810+
811+
# 26| Block 2
812+
# 26| r26_1(int) = Constant[0] :
813+
# 26| r26_2(bool) = CompareEQ : r26_8, r26_1
814+
# 26| v26_3(void) = ConditionalBranch : r26_2
815+
#-----| False -> Block 3
816+
#-----| True -> Block 4
817+
818+
# 26| Block 3
819+
# 26| r26_4(int) = Constant[1] :
820+
# 26| r26_5(bool) = CompareEQ : r26_8, r26_4
821+
# 26| v26_6(void) = ConditionalBranch : r26_5
822+
#-----| True -> Block 6
823+
824+
# 26| Block 4
825+
# 26| v26_7(void) = Unwind :
826+
#-----| Goto -> Block 7
827+
828+
# 26| Block 5
829+
# 26| r26_8(int) = Constant[1] :
830+
# 26| r26_9(int) = Constant[-1] :
831+
# 26| r26_10(bool) = CompareEQ : r26_8, r26_9
832+
# 26| v26_11(void) = ConditionalBranch : r26_10
833+
#-----| False -> Block 2
834+
#-----| True -> Block 4
835+
836+
# 27| Block 6
837+
# 27| r27_1(glval<int>) = VariableAddress[#return] :
838+
# 27| r27_2(int) = Constant[1] :
839+
# 27| mu27_3(int) = Store[#return] : &:r27_1, r27_2
840+
#-----| Goto -> Block 1
841+
842+
# 29| Block 7
843+
# 29| r29_1(glval<int>) = VariableAddress[#return] :
844+
# 29| r29_2(int) = Constant[0] :
845+
# 29| mu29_3(int) = Store[#return] : &:r29_1, r29_2
846+
#-----| Goto -> Block 1
847+
789848
ir.cpp:
790849
# 1| void Constants()
791850
# 1| Block 0

0 commit comments

Comments
 (0)