Skip to content

Commit 3c8efa8

Browse files
committed
C++: Handle Microsoft '__try __except' in the existing 'TryStmt' IR logic.
1 parent cd6e421 commit 3c8efa8

11 files changed

+99
-66
lines changed

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,43 @@ class TranslatedUnreachableReturnStmt extends TranslatedReturnStmt {
249249
}
250250

251251
/**
252-
* The IR translation of a C++ `try` statement.
252+
* A C/C++ `try` statement, or a `__try __except` or `__try __finally` statement.
253+
*/
254+
private class TryOrMicrosoftTryStmt extends Stmt {
255+
TryOrMicrosoftTryStmt() {
256+
this instanceof TryStmt or
257+
this instanceof MicrosoftTryStmt
258+
}
259+
260+
/** Gets the number of `catch block`s of this statement. */
261+
int getNumberOfCatchClauses() {
262+
result = this.(TryStmt).getNumberOfCatchClauses()
263+
or
264+
this instanceof MicrosoftTryExceptStmt and
265+
result = 1
266+
}
267+
268+
/** Gets the `body` statement of this statement. */
269+
Stmt getStmt() {
270+
result = this.(TryStmt).getStmt()
271+
or
272+
result = this.(MicrosoftTryStmt).getStmt()
273+
}
274+
275+
/** Gets the `i`th `catch block` statement of this statement. */
276+
Stmt getHandlerStmt(int i) {
277+
result = this.(TryStmt).getChild(i + 1)
278+
or
279+
i = 0 and
280+
result = this.(MicrosoftTryExceptStmt).getExcept()
281+
}
282+
}
283+
284+
/**
285+
* The IR translation of a C++ `try` (or a `__try __except` or `__try __finally`) statement.
253286
*/
254287
class TranslatedTryStmt extends TranslatedStmt {
255-
override TryStmt stmt;
288+
override TryOrMicrosoftTryStmt stmt;
256289

257290
override TranslatedElement getChild(int id) {
258291
id = 0 and result = getBody()
@@ -291,7 +324,7 @@ class TranslatedTryStmt extends TranslatedStmt {
291324
}
292325

293326
private TranslatedHandler getHandler(int index) {
294-
result = getTranslatedStmt(stmt.getChild(index + 1))
327+
result = getTranslatedStmt(stmt.getHandlerStmt(index))
295328
}
296329

297330
private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getStmt()) }

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| try_except.c:7:13:7:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
10-
| try_except.c:19:13:19:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
119
ambiguousSuccessors
1210
unexplainedLoop
1311
unnecessaryPhiInstruction

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| try_except.c:7:13:7:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
10-
| try_except.c:19:13:19:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
119
ambiguousSuccessors
1210
unexplainedLoop
1311
unnecessaryPhiInstruction

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9142,11 +9142,41 @@
91429142
| struct_init.cpp:41:21:41:32 | Unary | r41_3 |
91439143
| try_except.c:6:6:6:6 | ChiPartial | partial:m6_3 |
91449144
| try_except.c:6:6:6:6 | ChiTotal | total:m6_2 |
9145+
| try_except.c:6:6:6:6 | SideEffect | ~m11_5 |
91459146
| try_except.c:7:7:7:7 | Address | &:r7_1 |
91469147
| try_except.c:7:10:7:10 | Address | &:r7_3 |
91479148
| try_except.c:7:13:7:14 | StoreValue | r7_4 |
9149+
| try_except.c:9:5:9:17 | CallTarget | func:r9_1 |
9150+
| try_except.c:9:5:9:17 | ChiPartial | partial:m9_4 |
9151+
| try_except.c:9:5:9:17 | ChiTotal | total:m6_4 |
9152+
| try_except.c:9:5:9:17 | SideEffect | ~m6_4 |
9153+
| try_except.c:9:19:9:19 | Arg(0) | 0:r9_2 |
9154+
| try_except.c:10:5:10:5 | Address | &:r10_3 |
9155+
| try_except.c:10:9:10:9 | Address | &:r10_1 |
9156+
| try_except.c:10:9:10:9 | Load | m7_5 |
9157+
| try_except.c:10:9:10:9 | StoreValue | r10_2 |
9158+
| try_except.c:11:5:11:17 | CallTarget | func:r11_1 |
9159+
| try_except.c:11:5:11:17 | ChiPartial | partial:m11_4 |
9160+
| try_except.c:11:5:11:17 | ChiTotal | total:m9_5 |
9161+
| try_except.c:11:5:11:17 | SideEffect | ~m9_5 |
9162+
| try_except.c:11:19:11:19 | Arg(0) | 0:r11_2 |
91489163
| try_except.c:18:6:18:6 | ChiPartial | partial:m18_3 |
91499164
| try_except.c:18:6:18:6 | ChiTotal | total:m18_2 |
9165+
| try_except.c:18:6:18:6 | SideEffect | ~m23_5 |
91509166
| try_except.c:19:7:19:7 | Address | &:r19_1 |
91519167
| try_except.c:19:10:19:10 | Address | &:r19_3 |
91529168
| try_except.c:19:13:19:14 | StoreValue | r19_4 |
9169+
| try_except.c:21:5:21:17 | CallTarget | func:r21_1 |
9170+
| try_except.c:21:5:21:17 | ChiPartial | partial:m21_4 |
9171+
| try_except.c:21:5:21:17 | ChiTotal | total:m18_4 |
9172+
| try_except.c:21:5:21:17 | SideEffect | ~m18_4 |
9173+
| try_except.c:21:19:21:19 | Arg(0) | 0:r21_2 |
9174+
| try_except.c:22:5:22:5 | Address | &:r22_3 |
9175+
| try_except.c:22:9:22:9 | Address | &:r22_1 |
9176+
| try_except.c:22:9:22:9 | Load | m19_5 |
9177+
| try_except.c:22:9:22:9 | StoreValue | r22_2 |
9178+
| try_except.c:23:5:23:17 | CallTarget | func:r23_1 |
9179+
| try_except.c:23:5:23:17 | ChiPartial | partial:m23_4 |
9180+
| try_except.c:23:5:23:17 | ChiTotal | total:m21_5 |
9181+
| try_except.c:23:5:23:17 | SideEffect | ~m21_5 |
9182+
| try_except.c:23:19:23:19 | Arg(0) | 0:r23_2 |

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| try_except.c:7:13:7:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
10-
| try_except.c:11:5:11:17 | CallSideEffect: call to ProbeFunction | Instruction 'CallSideEffect: call to ProbeFunction' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
119
| try_except.c:13:13:13:13 | Constant: 0 | Instruction 'Constant: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
1210
| try_except.c:14:5:14:8 | CallSideEffect: call to sink | Instruction 'CallSideEffect: call to sink' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
13-
| try_except.c:19:13:19:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
14-
| try_except.c:23:5:23:17 | CallSideEffect: call to ProbeFunction | Instruction 'CallSideEffect: call to ProbeFunction' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
1511
| try_except.c:26:5:26:8 | CallSideEffect: call to sink | Instruction 'CallSideEffect: call to sink' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
1612
ambiguousSuccessors
1713
unexplainedLoop

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

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10414,19 +10414,14 @@ struct_init.cpp:
1041410414
try_except.c:
1041510415
# 6| void f()
1041610416
# 6| Block 0
10417-
# 6| v6_1(void) = EnterFunction :
10418-
# 6| mu6_2(unknown) = AliasedDefinition :
10419-
# 6| mu6_3(unknown) = InitializeNonLocal :
10420-
# 7| r7_1(glval<int>) = VariableAddress[x] :
10421-
# 7| mu7_2(int) = Uninitialized[x] : &:r7_1
10422-
# 7| r7_3(glval<int>) = VariableAddress[y] :
10423-
# 7| r7_4(int) = Constant[0] :
10424-
# 7| mu7_5(int) = Store[y] : &:r7_3, r7_4
10425-
10426-
# 13| Block 1
10427-
# 13| r13_1(int) = Constant[0] :
10428-
10429-
# 9| Block 2
10417+
# 6| v6_1(void) = EnterFunction :
10418+
# 6| mu6_2(unknown) = AliasedDefinition :
10419+
# 6| mu6_3(unknown) = InitializeNonLocal :
10420+
# 7| r7_1(glval<int>) = VariableAddress[x] :
10421+
# 7| mu7_2(int) = Uninitialized[x] : &:r7_1
10422+
# 7| r7_3(glval<int>) = VariableAddress[y] :
10423+
# 7| r7_4(int) = Constant[0] :
10424+
# 7| mu7_5(int) = Store[y] : &:r7_3, r7_4
1043010425
# 9| r9_1(glval<unknown>) = FunctionAddress[ProbeFunction] :
1043110426
# 9| r9_2(int) = Constant[0] :
1043210427
# 9| v9_3(void) = Call[ProbeFunction] : func:r9_1, 0:r9_2
@@ -10439,6 +10434,13 @@ try_except.c:
1043910434
# 11| r11_2(int) = Constant[0] :
1044010435
# 11| v11_3(void) = Call[ProbeFunction] : func:r11_1, 0:r11_2
1044110436
# 11| mu11_4(unknown) = ^CallSideEffect : ~m?
10437+
# 16| v16_1(void) = NoOp :
10438+
# 6| v6_4(void) = ReturnVoid :
10439+
# 6| v6_5(void) = AliasedUse : ~m?
10440+
# 6| v6_6(void) = ExitFunction :
10441+
10442+
# 13| Block 1
10443+
# 13| r13_1(int) = Constant[0] :
1044210444

1044310445
# 14| Block 2
1044410446
# 14| r14_1(glval<unknown>) = FunctionAddress[sink] :
@@ -10447,24 +10449,16 @@ try_except.c:
1044710449
# 14| v14_4(void) = Call[sink] : func:r14_1, 0:r14_3
1044810450
# 14| mu14_5(unknown) = ^CallSideEffect : ~m?
1044910451

10450-
# 16| Block 4
10451-
# 16| v16_1(void) = NoOp :
10452-
# 6| v6_4(void) = ReturnVoid :
10453-
# 6| v6_5(void) = AliasedUse : ~m?
10454-
# 6| v6_6(void) = ExitFunction :
10455-
1045610452
# 18| void g()
1045710453
# 18| Block 0
10458-
# 18| v18_1(void) = EnterFunction :
10459-
# 18| mu18_2(unknown) = AliasedDefinition :
10460-
# 18| mu18_3(unknown) = InitializeNonLocal :
10461-
# 19| r19_1(glval<int>) = VariableAddress[x] :
10462-
# 19| mu19_2(int) = Uninitialized[x] : &:r19_1
10463-
# 19| r19_3(glval<int>) = VariableAddress[y] :
10464-
# 19| r19_4(int) = Constant[0] :
10465-
# 19| mu19_5(int) = Store[y] : &:r19_3, r19_4
10466-
10467-
# 21| Block 1
10454+
# 18| v18_1(void) = EnterFunction :
10455+
# 18| mu18_2(unknown) = AliasedDefinition :
10456+
# 18| mu18_3(unknown) = InitializeNonLocal :
10457+
# 19| r19_1(glval<int>) = VariableAddress[x] :
10458+
# 19| mu19_2(int) = Uninitialized[x] : &:r19_1
10459+
# 19| r19_3(glval<int>) = VariableAddress[y] :
10460+
# 19| r19_4(int) = Constant[0] :
10461+
# 19| mu19_5(int) = Store[y] : &:r19_3, r19_4
1046810462
# 21| r21_1(glval<unknown>) = FunctionAddress[ProbeFunction] :
1046910463
# 21| r21_2(int) = Constant[0] :
1047010464
# 21| v21_3(void) = Call[ProbeFunction] : func:r21_1, 0:r21_2
@@ -10477,16 +10471,14 @@ try_except.c:
1047710471
# 23| r23_2(int) = Constant[0] :
1047810472
# 23| v23_3(void) = Call[ProbeFunction] : func:r23_1, 0:r23_2
1047910473
# 23| mu23_4(unknown) = ^CallSideEffect : ~m?
10474+
# 28| v28_1(void) = NoOp :
10475+
# 18| v18_4(void) = ReturnVoid :
10476+
# 18| v18_5(void) = AliasedUse : ~m?
10477+
# 18| v18_6(void) = ExitFunction :
1048010478

1048110479
# 26| Block 1
1048210480
# 26| r26_1(glval<unknown>) = FunctionAddress[sink] :
1048310481
# 26| r26_2(glval<int>) = VariableAddress[x] :
1048410482
# 26| r26_3(int) = Load[x] : &:r26_2, ~m?
1048510483
# 26| v26_4(void) = Call[sink] : func:r26_1, 0:r26_3
1048610484
# 26| mu26_5(unknown) = ^CallSideEffect : ~m?
10487-
10488-
# 28| Block 3
10489-
# 28| v28_1(void) = NoOp :
10490-
# 18| v18_4(void) = ReturnVoid :
10491-
# 18| v18_5(void) = AliasedUse : ~m?
10492-
# 18| v18_6(void) = ExitFunction :

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| try_except.c:7:13:7:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
10-
| try_except.c:19:13:19:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
119
ambiguousSuccessors
1210
unexplainedLoop
1311
unnecessaryPhiInstruction

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ missingOperandType
66
duplicateChiOperand
77
sideEffectWithoutPrimary
88
instructionWithoutSuccessor
9-
| try_except.c:7:13:7:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() |
10-
| try_except.c:19:13:19:14 | Store: 0 | Instruction 'Store: 0' has no successors in function '$@'. | try_except.c:18:6:18:6 | void g() | void g() |
119
ambiguousSuccessors
1210
unexplainedLoop
1311
unnecessaryPhiInstruction

cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ instructionWithoutSuccessor
1313
| condition_decls.cpp:41:22:41:23 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) |
1414
| condition_decls.cpp:48:52:48:53 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) |
1515
| misc.c:171:10:171:13 | Uninitialized: definition of str2 | Instruction 'Uninitialized: definition of str2' has no successors in function '$@'. | misc.c:168:6:168:8 | void vla() | void vla() |
16-
| ms_try_except.cpp:3:9:3:9 | Uninitialized: definition of x | Instruction 'Uninitialized: definition of x' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
17-
| ms_try_mix.cpp:11:12:11:15 | Chi: call to C | Instruction 'Chi: call to C' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
18-
| ms_try_mix.cpp:28:12:28:15 | Chi: call to C | Instruction 'Chi: call to C' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
19-
| ms_try_mix.cpp:48:10:48:13 | Chi: call to C | Instruction 'Chi: call to C' has no successors in function '$@'. | ms_try_mix.cpp:47:6:47:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() |
16+
| ms_try_mix.cpp:16:13:16:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
17+
| ms_try_mix.cpp:33:13:33:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
18+
| ms_try_mix.cpp:51:5:51:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:47:6:47:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() |
2019
| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:6:21:6 | void stmtexpr::g(int) | void stmtexpr::g(int) |
2120
| vla.c:5:9:5:14 | Uninitialized: definition of matrix | Instruction 'Uninitialized: definition of matrix' has no successors in function '$@'. | vla.c:3:5:3:8 | int main(int, char**) | int main(int, char**) |
2221
| vla.c:11:6:11:16 | Chi: vla_typedef | Instruction 'Chi: vla_typedef' has no successors in function '$@'. | vla.c:11:6:11:16 | void vla_typedef() | void vla_typedef() |

cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,16 @@ instructionWithoutSuccessor
3131
| misc.c:174:17:174:22 | CallSideEffect: call to getInt | Instruction 'CallSideEffect: call to getInt' has no successors in function '$@'. | misc.c:168:6:168:8 | void vla() | void vla() |
3232
| misc.c:174:30:174:35 | CallSideEffect: call to getInt | Instruction 'CallSideEffect: call to getInt' has no successors in function '$@'. | misc.c:168:6:168:8 | void vla() | void vla() |
3333
| misc.c:174:55:174:60 | Store: (char ****)... | Instruction 'Store: (char ****)...' has no successors in function '$@'. | misc.c:168:6:168:8 | void vla() | void vla() |
34-
| ms_try_except.cpp:3:9:3:9 | Uninitialized: definition of x | Instruction 'Uninitialized: definition of x' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
35-
| ms_try_except.cpp:7:13:7:17 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
3634
| ms_try_except.cpp:9:19:9:19 | Load: j | Instruction 'Load: j' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
3735
| ms_try_except.cpp:10:13:10:17 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
38-
| ms_try_except.cpp:14:13:14:17 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
3936
| ms_try_except.cpp:17:13:17:17 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
4037
| ms_try_except.cpp:19:17:19:21 | Sub: ... - ... | Instruction 'Sub: ... - ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
4138
| ms_try_except.cpp:20:9:20:13 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | ms_try_except.cpp:2:6:2:18 | void ms_try_except(int) | void ms_try_except(int) |
42-
| ms_try_mix.cpp:11:12:11:15 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
4339
| ms_try_mix.cpp:16:13:16:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
44-
| ms_try_mix.cpp:18:16:18:19 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
4540
| ms_try_mix.cpp:20:15:20:39 | Constant: 1 | Instruction 'Constant: 1' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
4641
| ms_try_mix.cpp:21:16:21:19 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:10:6:10:18 | void ms_except_mix(int) | void ms_except_mix(int) |
47-
| ms_try_mix.cpp:28:12:28:15 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
4842
| ms_try_mix.cpp:33:13:33:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
49-
| ms_try_mix.cpp:35:16:35:19 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
5043
| ms_try_mix.cpp:38:16:38:19 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:27:6:27:19 | void ms_finally_mix(int) | void ms_finally_mix(int) |
51-
| ms_try_mix.cpp:48:10:48:13 | IndirectMayWriteSideEffect: call to C | Instruction 'IndirectMayWriteSideEffect: call to C' has no successors in function '$@'. | ms_try_mix.cpp:47:6:47:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() |
5244
| ms_try_mix.cpp:51:5:51:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:47:6:47:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() |
5345
| ms_try_mix.cpp:53:13:54:3 | NoOp: { ... } | Instruction 'NoOp: { ... }' has no successors in function '$@'. | ms_try_mix.cpp:47:6:47:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() |
5446
| stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:6:21:6 | void stmtexpr::g(int) | void stmtexpr::g(int) |

0 commit comments

Comments
 (0)