Skip to content

Commit f82c97b

Browse files
committed
C++: fix IR control flow for cast in placement new
1 parent 56d0762 commit f82c97b

File tree

7 files changed

+11
-32
lines changed

7 files changed

+11
-32
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,7 @@ class TranslatedAllocatorCall extends TTranslatedAllocatorCall, TranslatedDirect
16981698
else
16991699
if index = 1 and expr.hasAlignedAllocation()
17001700
then result = getTranslatedExpr(expr.getAlignmentArgument())
1701-
else result = getTranslatedExpr(expr.getAllocatorCall().getArgument(index))
1701+
else result = getTranslatedExpr(expr.getAllocatorCall().getArgument(index).getFullyConverted())
17021702
}
17031703
}
17041704

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ missingOperandType
1010
duplicateChiOperand
1111
sideEffectWithoutPrimary
1212
instructionWithoutSuccessor
13-
| ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1413
ambiguousSuccessors
15-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:3:1322:13 | Call: new |
16-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1714
unexplainedLoop
1815
unnecessaryPhiInstruction
1916
memoryOperandDefinitionIsUnmodeled

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ missingOperandType
1010
duplicateChiOperand
1111
sideEffectWithoutPrimary
1212
instructionWithoutSuccessor
13-
| ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1413
ambiguousSuccessors
15-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:3:1322:13 | Call: new |
16-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1714
unexplainedLoop
1815
unnecessaryPhiInstruction
1916
memoryOperandDefinitionIsUnmodeled

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ missingOperandType
1010
duplicateChiOperand
1111
sideEffectWithoutPrimary
1212
instructionWithoutSuccessor
13-
| ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1413
ambiguousSuccessors
15-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:3:1322:13 | Call: new |
16-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1714
unexplainedLoop
1815
unnecessaryPhiInstruction
1916
memoryOperandDefinitionIsUnmodeled

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

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7382,22 +7382,16 @@ ir.cpp:
73827382
# 1322| r1322_2(unsigned long) = Constant[4] :
73837383
# 1322| r1322_3(glval<int *>) = VariableAddress[p] :
73847384
# 1322| r1322_4(int *) = Load : &:r1322_3, ~m?
7385-
#-----| Goto -> Block 1
7386-
#-----| Goto -> Block 2
7387-
7388-
# 1322| Block 1
7389-
# 1322| r1322_5(void *) = Convert : r1322_4
7390-
7391-
# 1322| Block 2
7392-
# 1322| r1322_6(void *) = Call : func:r1322_1, 0:r1322_2, 1:r1322_4
7393-
# 1322| mu1322_7(unknown) = ^CallSideEffect : ~m?
7394-
# 1322| mu1322_8(unknown) = ^InitializeDynamicAllocation : &:r1322_6
7395-
# 1322| r1322_9(int *) = Convert : r1322_6
7396-
# 1323| v1323_1(void) = NoOp :
7397-
# 1320| v1320_8(void) = ReturnIndirection[p] : &:r1320_6, ~m?
7398-
# 1320| v1320_9(void) = ReturnVoid :
7399-
# 1320| v1320_10(void) = AliasedUse : ~m?
7400-
# 1320| v1320_11(void) = ExitFunction :
7385+
# 1322| r1322_5(void *) = Convert : r1322_4
7386+
# 1322| r1322_6(void *) = Call : func:r1322_1, 0:r1322_2, 1:r1322_5
7387+
# 1322| mu1322_7(unknown) = ^CallSideEffect : ~m?
7388+
# 1322| mu1322_8(unknown) = ^InitializeDynamicAllocation : &:r1322_6
7389+
# 1322| r1322_9(int *) = Convert : r1322_6
7390+
# 1323| v1323_1(void) = NoOp :
7391+
# 1320| v1320_8(void) = ReturnIndirection[p] : &:r1320_6, ~m?
7392+
# 1320| v1320_9(void) = ReturnVoid :
7393+
# 1320| v1320_10(void) = AliasedUse : ~m?
7394+
# 1320| v1320_11(void) = ExitFunction :
74017395

74027396
perf-regression.cpp:
74037397
# 6| void Big::Big()

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ missingOperandType
1010
duplicateChiOperand
1111
sideEffectWithoutPrimary
1212
instructionWithoutSuccessor
13-
| ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1413
ambiguousSuccessors
15-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:3:1322:13 | Call: new |
16-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1714
unexplainedLoop
1815
unnecessaryPhiInstruction
1916
memoryOperandDefinitionIsUnmodeled

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ missingOperandType
1010
duplicateChiOperand
1111
sideEffectWithoutPrimary
1212
instructionWithoutSuccessor
13-
| ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1413
ambiguousSuccessors
15-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:3:1322:13 | Call: new |
16-
| ir.cpp:1322:8:1322:8 | Load: p | Goto | 2 | ir.cpp:1322:8:1322:8 | Convert: (void *)... |
1714
unexplainedLoop
1815
unnecessaryPhiInstruction
1916
memoryOperandDefinitionIsUnmodeled

0 commit comments

Comments
 (0)