Merge pull request #13704 from jketema/ir-test

C++: Add assignment operation IR test where the result is being used
This commit is contained in:
Jeroen Ketema
2023-07-10 19:01:24 +02:00
committed by GitHub
4 changed files with 75 additions and 0 deletions

View File

@@ -14562,6 +14562,40 @@ ir.cpp:
# 1930| Value = [Literal] 40
# 1930| ValueCategory = prvalue
# 1931| getStmt(2): [ReturnStmt] return ...
# 1933| [TopLevelFunction] void test_assign_with_assign_operation()
# 1933| <params>:
# 1933| getEntryPoint(): [BlockStmt] { ... }
# 1934| getStmt(0): [DeclStmt] declaration
# 1934| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i
# 1934| Type = [IntType] int
# 1934| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j
# 1934| Type = [IntType] int
# 1934| getVariable().getInitializer(): [Initializer] initializer for j
# 1934| getExpr(): [Literal] 0
# 1934| Type = [IntType] int
# 1934| Value = [Literal] 0
# 1934| ValueCategory = prvalue
# 1935| getStmt(1): [ExprStmt] ExprStmt
# 1935| getExpr(): [AssignExpr] ... = ...
# 1935| Type = [IntType] int
# 1935| ValueCategory = lvalue
# 1935| getLValue(): [VariableAccess] i
# 1935| Type = [IntType] int
# 1935| ValueCategory = lvalue
# 1935| getRValue(): [AssignAddExpr] ... += ...
# 1935| Type = [IntType] int
# 1935| ValueCategory = prvalue
# 1935| getLValue(): [VariableAccess] j
# 1935| Type = [IntType] int
# 1935| ValueCategory = lvalue
# 1935| getRValue(): [Literal] 40
# 1935| Type = [IntType] int
# 1935| Value = [Literal] 40
# 1935| ValueCategory = prvalue
# 1935| getRValue().getFullyConverted(): [ParenthesisExpr] (...)
# 1935| Type = [IntType] int
# 1935| ValueCategory = prvalue
# 1936| getStmt(2): [ReturnStmt] return ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -1930,4 +1930,9 @@ void test_double_assign() {
i = j = 40;
}
void test_assign_with_assign_operation() {
int i, j = 0;
i = (j += 40);
}
// semmle-extractor-options: -std=c++17 --clang

View File

@@ -8877,6 +8877,20 @@
| ir.cpp:1930:7:1930:12 | StoreValue | r1930_4 |
| ir.cpp:1930:11:1930:12 | StoreValue | r1930_1 |
| ir.cpp:1930:11:1930:12 | Unary | r1930_1 |
| ir.cpp:1933:6:1933:38 | ChiPartial | partial:m1933_3 |
| ir.cpp:1933:6:1933:38 | ChiTotal | total:m1933_2 |
| ir.cpp:1933:6:1933:38 | SideEffect | m1933_3 |
| ir.cpp:1934:7:1934:7 | Address | &:r1934_1 |
| ir.cpp:1934:10:1934:10 | Address | &:r1934_3 |
| ir.cpp:1934:13:1934:14 | StoreValue | r1934_4 |
| ir.cpp:1935:3:1935:3 | Address | &:r1935_6 |
| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 |
| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 |
| ir.cpp:1935:8:1935:8 | Left | r1935_3 |
| ir.cpp:1935:8:1935:8 | Load | m1934_5 |
| ir.cpp:1935:8:1935:14 | StoreValue | r1935_4 |
| ir.cpp:1935:8:1935:14 | StoreValue | r1935_4 |
| ir.cpp:1935:13:1935:14 | Right | r1935_1 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

View File

@@ -10244,6 +10244,28 @@ ir.cpp:
# 1928| v1928_5(void) = AliasedUse : ~m?
# 1928| v1928_6(void) = ExitFunction :
# 1933| void test_assign_with_assign_operation()
# 1933| Block 0
# 1933| v1933_1(void) = EnterFunction :
# 1933| mu1933_2(unknown) = AliasedDefinition :
# 1933| mu1933_3(unknown) = InitializeNonLocal :
# 1934| r1934_1(glval<int>) = VariableAddress[i] :
# 1934| mu1934_2(int) = Uninitialized[i] : &:r1934_1
# 1934| r1934_3(glval<int>) = VariableAddress[j] :
# 1934| r1934_4(int) = Constant[0] :
# 1934| mu1934_5(int) = Store[j] : &:r1934_3, r1934_4
# 1935| r1935_1(int) = Constant[40] :
# 1935| r1935_2(glval<int>) = VariableAddress[j] :
# 1935| r1935_3(int) = Load[j] : &:r1935_2, ~m?
# 1935| r1935_4(int) = Add : r1935_3, r1935_1
# 1935| mu1935_5(int) = Store[j] : &:r1935_2, r1935_4
# 1935| r1935_6(glval<int>) = VariableAddress[i] :
# 1935| mu1935_7(int) = Store[i] : &:r1935_6, r1935_4
# 1936| v1936_1(void) = NoOp :
# 1933| v1933_4(void) = ReturnVoid :
# 1933| v1933_5(void) = AliasedUse : ~m?
# 1933| v1933_6(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0