mirror of
https://github.com/github/codeql.git
synced 2026-04-30 03:05:15 +02:00
C++: Add two testcases demonstrating malformed IR from missing declaration entries from decl stmts.
This commit is contained in:
@@ -14161,6 +14161,221 @@ ir.cpp:
|
||||
# 1851| Type = [PointerType] const char *
|
||||
# 1851| ValueCategory = prvalue
|
||||
# 1852| getStmt(2): [ReturnStmt] return ...
|
||||
# 1855| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&)
|
||||
# 1855| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const S &
|
||||
# 1855| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&)
|
||||
# 1855| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] S &&
|
||||
# 1859| [CopyAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int> const&)
|
||||
# 1859| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const Bar1<int> &
|
||||
# 1859| [MoveAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int>&&)
|
||||
# 1859| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] Bar1<int> &&
|
||||
# 1862| [MemberFunction] void* missing_declaration_entries::Bar1<T>::missing_type_decl_entry(missing_declaration_entries::Bar1<T>::pointer)
|
||||
# 1862| <params>:
|
||||
# 1862| getParameter(0): [Parameter] p
|
||||
# 1862| Type = [CTypedefType,NestedTypedefType] pointer
|
||||
# 1862| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1863| getStmt(0): [DeclStmt] declaration
|
||||
# 1863| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res
|
||||
# 1863| Type = [CTypedefType,LocalTypedefType] _Res
|
||||
# 1864| getStmt(1): [ReturnStmt] return ...
|
||||
# 1864| getExpr(): [VariableAccess] p
|
||||
# 1864| Type = [CTypedefType,NestedTypedefType] pointer
|
||||
# 1864| ValueCategory = prvalue(load)
|
||||
# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)...
|
||||
# 1864| Conversion = [PointerConversion] pointer conversion
|
||||
# 1864| Type = [VoidPointerType] void *
|
||||
# 1864| ValueCategory = prvalue
|
||||
# 1862| [MemberFunction] void* missing_declaration_entries::Bar1<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer)
|
||||
# 1862| <params>:
|
||||
# 1862| getParameter(0): [Parameter] p
|
||||
# 1862| Type = [CTypedefType,NestedTypedefType] pointer
|
||||
# 1862| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1863| getStmt(0): [DeclStmt] declaration
|
||||
# 1864| getStmt(1): [ReturnStmt] return ...
|
||||
# 1864| getExpr(): [VariableAccess] p
|
||||
# 1864| Type = [CTypedefType,NestedTypedefType] pointer
|
||||
# 1864| ValueCategory = prvalue(load)
|
||||
# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)...
|
||||
# 1864| Conversion = [PointerConversion] pointer conversion
|
||||
# 1864| Type = [VoidPointerType] void *
|
||||
# 1864| ValueCategory = prvalue
|
||||
# 1868| [TopLevelFunction] void missing_declaration_entries::test1()
|
||||
# 1868| <params>:
|
||||
# 1868| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1869| getStmt(0): [DeclStmt] declaration
|
||||
# 1869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
|
||||
# 1869| Type = [ClassTemplateInstantiation,Struct] Bar1<int>
|
||||
# 1870| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 1870| getExpr(): [FunctionCall] call to missing_type_decl_entry
|
||||
# 1870| Type = [VoidPointerType] void *
|
||||
# 1870| ValueCategory = prvalue
|
||||
# 1870| getQualifier(): [VariableAccess] b
|
||||
# 1870| Type = [ClassTemplateInstantiation,Struct] Bar1<int>
|
||||
# 1870| ValueCategory = lvalue
|
||||
# 1870| getArgument(0): [Literal] 0
|
||||
# 1870| Type = [NullPointerType] decltype(nullptr)
|
||||
# 1870| Value = [Literal] 0
|
||||
# 1870| ValueCategory = prvalue
|
||||
# 1870| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)...
|
||||
# 1870| Conversion = [PointerConversion] pointer conversion
|
||||
# 1870| Type = [CTypedefType,NestedTypedefType] pointer
|
||||
# 1870| Value = [CStyleCast] 0
|
||||
# 1870| ValueCategory = prvalue
|
||||
# 1871| getStmt(2): [ReturnStmt] return ...
|
||||
# 1873| [CopyAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int> const&)
|
||||
# 1873| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [LValueReferenceType] const Bar2<int> &
|
||||
# 1873| [MoveAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int>&&)
|
||||
# 1873| <params>:
|
||||
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||
#-----| Type = [RValueReferenceType] Bar2<int> &&
|
||||
# 1875| [MemberFunction] int missing_declaration_entries::Bar2<T>::two_missing_variable_declaration_entries()
|
||||
# 1875| <params>:
|
||||
# 1875| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1876| getStmt(0): [DeclStmt] declaration
|
||||
# 1876| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
|
||||
# 1876| Type = [ArrayType] int[10]
|
||||
# 1876| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y
|
||||
# 1876| Type = [ArrayType] int[10]
|
||||
# 1877| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 1877| getExpr(): [AssignExpr] ... = ...
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getLValue(): [PointerDereferenceExpr] * ...
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getOperand(): [VariableAccess] x
|
||||
# 1877| Type = [ArrayType] int[10]
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1877| Type = [IntPointerType] int *
|
||||
# 1877| ValueCategory = prvalue
|
||||
# 1877| getRValue(): [Literal] 10
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| Value = [Literal] 10
|
||||
# 1877| ValueCategory = prvalue
|
||||
# 1878| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 1878| getExpr(): [AssignExpr] ... = ...
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getLValue(): [PointerDereferenceExpr] * ...
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getOperand(): [VariableAccess] y
|
||||
# 1878| Type = [ArrayType] int[10]
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1878| Type = [IntPointerType] int *
|
||||
# 1878| ValueCategory = prvalue
|
||||
# 1878| getRValue(): [Literal] 10
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| Value = [Literal] 10
|
||||
# 1878| ValueCategory = prvalue
|
||||
# 1879| getStmt(3): [ReturnStmt] return ...
|
||||
# 1879| getExpr(): [AddExpr] ... + ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1879| getLeftOperand(): [PointerDereferenceExpr] * ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue(load)
|
||||
# 1879| getOperand(): [VariableAccess] x
|
||||
# 1879| Type = [ArrayType] int[10]
|
||||
# 1879| ValueCategory = lvalue
|
||||
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1879| Type = [IntPointerType] int *
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1879| getRightOperand(): [PointerDereferenceExpr] * ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue(load)
|
||||
# 1879| getOperand(): [VariableAccess] y
|
||||
# 1879| Type = [ArrayType] int[10]
|
||||
# 1879| ValueCategory = lvalue
|
||||
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1879| Type = [IntPointerType] int *
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1875| [MemberFunction] int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries()
|
||||
# 1875| <params>:
|
||||
# 1875| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1876| getStmt(0): [DeclStmt] declaration
|
||||
# 1877| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 1877| getExpr(): [AssignExpr] ... = ...
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getLValue(): [PointerDereferenceExpr] * ...
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getOperand(): [VariableAccess] x
|
||||
# 1877| Type = [ArrayType] int[10]
|
||||
# 1877| ValueCategory = lvalue
|
||||
# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1877| Type = [IntPointerType] int *
|
||||
# 1877| ValueCategory = prvalue
|
||||
# 1877| getRValue(): [Literal] 10
|
||||
# 1877| Type = [IntType] int
|
||||
# 1877| Value = [Literal] 10
|
||||
# 1877| ValueCategory = prvalue
|
||||
# 1878| getStmt(2): [ExprStmt] ExprStmt
|
||||
# 1878| getExpr(): [AssignExpr] ... = ...
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getLValue(): [PointerDereferenceExpr] * ...
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getOperand(): [VariableAccess] y
|
||||
# 1878| Type = [ArrayType] int[10]
|
||||
# 1878| ValueCategory = lvalue
|
||||
# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1878| Type = [IntPointerType] int *
|
||||
# 1878| ValueCategory = prvalue
|
||||
# 1878| getRValue(): [Literal] 10
|
||||
# 1878| Type = [IntType] int
|
||||
# 1878| Value = [Literal] 10
|
||||
# 1878| ValueCategory = prvalue
|
||||
# 1879| getStmt(3): [ReturnStmt] return ...
|
||||
# 1879| getExpr(): [AddExpr] ... + ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1879| getLeftOperand(): [PointerDereferenceExpr] * ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue(load)
|
||||
# 1879| getOperand(): [VariableAccess] x
|
||||
# 1879| Type = [ArrayType] int[10]
|
||||
# 1879| ValueCategory = lvalue
|
||||
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1879| Type = [IntPointerType] int *
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1879| getRightOperand(): [PointerDereferenceExpr] * ...
|
||||
# 1879| Type = [IntType] int
|
||||
# 1879| ValueCategory = prvalue(load)
|
||||
# 1879| getOperand(): [VariableAccess] y
|
||||
# 1879| Type = [ArrayType] int[10]
|
||||
# 1879| ValueCategory = lvalue
|
||||
# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion
|
||||
# 1879| Type = [IntPointerType] int *
|
||||
# 1879| ValueCategory = prvalue
|
||||
# 1883| [TopLevelFunction] void missing_declaration_entries::test2()
|
||||
# 1883| <params>:
|
||||
# 1883| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1884| getStmt(0): [DeclStmt] declaration
|
||||
# 1884| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b
|
||||
# 1884| Type = [ClassTemplateInstantiation,Struct] Bar2<int>
|
||||
# 1885| getStmt(1): [ExprStmt] ExprStmt
|
||||
# 1885| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries
|
||||
# 1885| Type = [IntType] int
|
||||
# 1885| ValueCategory = prvalue
|
||||
# 1885| getQualifier(): [VariableAccess] b
|
||||
# 1885| Type = [ClassTemplateInstantiation,Struct] Bar2<int>
|
||||
# 1885| ValueCategory = lvalue
|
||||
# 1886| getStmt(2): [ReturnStmt] return ...
|
||||
perf-regression.cpp:
|
||||
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
|
||||
# 4| <params>:
|
||||
|
||||
@@ -3,6 +3,8 @@ unexpectedOperand
|
||||
duplicateOperand
|
||||
missingPhiOperand
|
||||
missingOperandType
|
||||
| ir.cpp:1877:13:1877:19 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1875:13:1875:13 | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() |
|
||||
| ir.cpp:1878:13:1878:19 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1875:13:1875:13 | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() |
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
|
||||
@@ -3,6 +3,8 @@ unexpectedOperand
|
||||
duplicateOperand
|
||||
missingPhiOperand
|
||||
missingOperandType
|
||||
| ir.cpp:1877:13:1877:19 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1875:13:1875:13 | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() |
|
||||
| ir.cpp:1878:13:1878:19 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1875:13:1875:13 | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() | int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries() |
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
|
||||
@@ -1851,4 +1851,39 @@ void magicvars() {
|
||||
const char *strfunc = __func__;
|
||||
}
|
||||
|
||||
namespace missing_declaration_entries {
|
||||
struct S {};
|
||||
|
||||
template<typename A, typename B> struct pair{};
|
||||
|
||||
template<typename T> struct Bar1 {
|
||||
typedef S* pointer;
|
||||
|
||||
void* missing_type_decl_entry(pointer p) {
|
||||
typedef pair<pointer, bool> _Res;
|
||||
return p;
|
||||
}
|
||||
};
|
||||
|
||||
void test1() {
|
||||
Bar1<int> b;
|
||||
b.missing_type_decl_entry(nullptr);
|
||||
}
|
||||
|
||||
template<typename T> struct Bar2 {
|
||||
|
||||
int two_missing_variable_declaration_entries() {
|
||||
int x[10], y[10];
|
||||
*x = 10;
|
||||
*y = 10;
|
||||
return *x + *y;
|
||||
}
|
||||
};
|
||||
|
||||
void test2() {
|
||||
Bar2<int> b;
|
||||
b.two_missing_variable_declaration_entries();
|
||||
}
|
||||
}
|
||||
|
||||
// semmle-extractor-options: -std=c++17 --clang
|
||||
|
||||
@@ -8650,6 +8650,95 @@
|
||||
| ir.cpp:1851:17:1851:23 | Address | &:r1851_1 |
|
||||
| ir.cpp:1851:27:1851:34 | StoreValue | r1851_3 |
|
||||
| ir.cpp:1851:27:1851:34 | Unary | r1851_2 |
|
||||
| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 |
|
||||
| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 |
|
||||
| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 |
|
||||
| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 |
|
||||
| ir.cpp:1862:15:1862:15 | Address | &:r1862_15 |
|
||||
| ir.cpp:1862:15:1862:15 | ChiPartial | partial:m1862_3 |
|
||||
| ir.cpp:1862:15:1862:15 | ChiTotal | total:m1862_2 |
|
||||
| ir.cpp:1862:15:1862:15 | Load | m1862_6 |
|
||||
| ir.cpp:1862:15:1862:15 | Load | m1864_5 |
|
||||
| ir.cpp:1862:15:1862:15 | SideEffect | m1862_3 |
|
||||
| ir.cpp:1862:15:1862:15 | SideEffect | m1862_8 |
|
||||
| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 |
|
||||
| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 |
|
||||
| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 |
|
||||
| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 |
|
||||
| ir.cpp:1862:47:1862:47 | Load | m1862_10 |
|
||||
| ir.cpp:1862:47:1862:47 | SideEffect | m1862_12 |
|
||||
| ir.cpp:1864:13:1864:21 | Address | &:r1864_1 |
|
||||
| ir.cpp:1864:20:1864:20 | Address | &:r1864_2 |
|
||||
| ir.cpp:1864:20:1864:20 | Load | m1862_10 |
|
||||
| ir.cpp:1864:20:1864:20 | StoreValue | r1864_4 |
|
||||
| ir.cpp:1864:20:1864:20 | Unary | r1864_3 |
|
||||
| ir.cpp:1868:10:1868:14 | ChiPartial | partial:m1868_3 |
|
||||
| ir.cpp:1868:10:1868:14 | ChiTotal | total:m1868_2 |
|
||||
| ir.cpp:1868:10:1868:14 | SideEffect | ~m1870_12 |
|
||||
| ir.cpp:1869:19:1869:19 | Address | &:r1869_1 |
|
||||
| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 |
|
||||
| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 |
|
||||
| ir.cpp:1870:9:1870:9 | Arg(this) | this:r1870_1 |
|
||||
| ir.cpp:1870:9:1870:9 | ChiPartial | partial:m1870_9 |
|
||||
| ir.cpp:1870:9:1870:9 | ChiTotal | total:m1869_2 |
|
||||
| ir.cpp:1870:9:1870:9 | SideEffect | m1869_2 |
|
||||
| ir.cpp:1870:11:1870:33 | CallTarget | func:r1870_2 |
|
||||
| ir.cpp:1870:11:1870:33 | ChiPartial | partial:m1870_5 |
|
||||
| ir.cpp:1870:11:1870:33 | ChiTotal | total:m1868_4 |
|
||||
| ir.cpp:1870:11:1870:33 | SideEffect | ~m1868_4 |
|
||||
| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 |
|
||||
| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 |
|
||||
| ir.cpp:1870:35:1870:41 | Arg(0) | 0:r1870_3 |
|
||||
| ir.cpp:1870:35:1870:41 | ChiPartial | partial:m1870_11 |
|
||||
| ir.cpp:1870:35:1870:41 | ChiTotal | total:m1870_6 |
|
||||
| ir.cpp:1870:35:1870:41 | SideEffect | ~m1870_6 |
|
||||
| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 |
|
||||
| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 |
|
||||
| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 |
|
||||
| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 |
|
||||
| ir.cpp:1875:13:1875:13 | Address | &:r1875_10 |
|
||||
| ir.cpp:1875:13:1875:13 | ChiPartial | partial:m1875_3 |
|
||||
| ir.cpp:1875:13:1875:13 | ChiTotal | total:m1875_2 |
|
||||
| ir.cpp:1875:13:1875:13 | Load | m1875_6 |
|
||||
| ir.cpp:1875:13:1875:13 | Load | m1879_9 |
|
||||
| ir.cpp:1875:13:1875:13 | SideEffect | m1875_3 |
|
||||
| ir.cpp:1875:13:1875:13 | SideEffect | m1875_8 |
|
||||
| ir.cpp:1877:13:1877:14 | Address | &:r1877_4 |
|
||||
| ir.cpp:1877:13:1877:19 | ChiPartial | partial:m1877_5 |
|
||||
| ir.cpp:1877:13:1877:19 | ChiTotal | total:~m? |
|
||||
| ir.cpp:1877:14:1877:14 | Unary | r1877_2 |
|
||||
| ir.cpp:1877:14:1877:14 | Unary | r1877_3 |
|
||||
| ir.cpp:1877:18:1877:19 | StoreValue | r1877_1 |
|
||||
| ir.cpp:1878:13:1878:14 | Address | &:r1878_4 |
|
||||
| ir.cpp:1878:13:1878:19 | ChiPartial | partial:m1878_5 |
|
||||
| ir.cpp:1878:13:1878:19 | ChiTotal | total:~m? |
|
||||
| ir.cpp:1878:14:1878:14 | Unary | r1878_2 |
|
||||
| ir.cpp:1878:14:1878:14 | Unary | r1878_3 |
|
||||
| ir.cpp:1878:18:1878:19 | StoreValue | r1878_1 |
|
||||
| ir.cpp:1879:13:1879:27 | Address | &:r1879_1 |
|
||||
| ir.cpp:1879:20:1879:21 | Left | r1879_4 |
|
||||
| ir.cpp:1879:20:1879:21 | Load | m1877_5 |
|
||||
| ir.cpp:1879:20:1879:26 | StoreValue | r1879_8 |
|
||||
| ir.cpp:1879:21:1879:21 | Address | &:r1879_3 |
|
||||
| ir.cpp:1879:21:1879:21 | Unary | r1879_2 |
|
||||
| ir.cpp:1879:25:1879:26 | Load | m1878_5 |
|
||||
| ir.cpp:1879:25:1879:26 | Right | r1879_7 |
|
||||
| ir.cpp:1879:26:1879:26 | Address | &:r1879_6 |
|
||||
| ir.cpp:1879:26:1879:26 | Unary | r1879_5 |
|
||||
| ir.cpp:1883:10:1883:14 | ChiPartial | partial:m1883_3 |
|
||||
| ir.cpp:1883:10:1883:14 | ChiTotal | total:m1883_2 |
|
||||
| ir.cpp:1883:10:1883:14 | SideEffect | ~m1885_5 |
|
||||
| ir.cpp:1884:19:1884:19 | Address | &:r1884_1 |
|
||||
| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 |
|
||||
| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 |
|
||||
| ir.cpp:1885:9:1885:9 | Arg(this) | this:r1885_1 |
|
||||
| ir.cpp:1885:9:1885:9 | ChiPartial | partial:m1885_7 |
|
||||
| ir.cpp:1885:9:1885:9 | ChiTotal | total:m1884_2 |
|
||||
| ir.cpp:1885:9:1885:9 | SideEffect | m1884_2 |
|
||||
| ir.cpp:1885:11:1885:50 | CallTarget | func:r1885_2 |
|
||||
| ir.cpp:1885:11:1885:50 | ChiPartial | partial:m1885_4 |
|
||||
| ir.cpp:1885:11:1885:50 | ChiTotal | total:m1883_4 |
|
||||
| ir.cpp:1885:11:1885:50 | SideEffect | ~m1883_4 |
|
||||
| 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 |
|
||||
|
||||
@@ -9932,6 +9932,104 @@ ir.cpp:
|
||||
# 1849| v1849_5(void) = AliasedUse : ~m?
|
||||
# 1849| v1849_6(void) = ExitFunction :
|
||||
|
||||
# 1862| void* missing_declaration_entries::Bar1<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer)
|
||||
# 1862| Block 0
|
||||
# 1862| v1862_1(void) = EnterFunction :
|
||||
# 1862| mu1862_2(unknown) = AliasedDefinition :
|
||||
# 1862| mu1862_3(unknown) = InitializeNonLocal :
|
||||
# 1862| r1862_4(glval<unknown>) = VariableAddress[#this] :
|
||||
# 1862| mu1862_5(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1862_4
|
||||
# 1862| r1862_6(glval<Bar1<int>>) = Load[#this] : &:r1862_4, ~m?
|
||||
# 1862| mu1862_7(Bar1<int>) = InitializeIndirection[#this] : &:r1862_6
|
||||
# 1862| r1862_8(glval<S *>) = VariableAddress[p] :
|
||||
# 1862| mu1862_9(S *) = InitializeParameter[p] : &:r1862_8
|
||||
# 1862| r1862_10(S *) = Load[p] : &:r1862_8, ~m?
|
||||
# 1862| mu1862_11(unknown) = InitializeIndirection[p] : &:r1862_10
|
||||
# 1864| r1864_1(glval<void *>) = VariableAddress[#return] :
|
||||
# 1864| r1864_2(glval<S *>) = VariableAddress[p] :
|
||||
# 1864| r1864_3(S *) = Load[p] : &:r1864_2, ~m?
|
||||
# 1864| r1864_4(void *) = Convert : r1864_3
|
||||
# 1864| mu1864_5(void *) = Store[#return] : &:r1864_1, r1864_4
|
||||
# 1862| v1862_12(void) = ReturnIndirection[#this] : &:r1862_6, ~m?
|
||||
# 1862| v1862_13(void) = ReturnIndirection[p] : &:r1862_10, ~m?
|
||||
# 1862| r1862_14(glval<void *>) = VariableAddress[#return] :
|
||||
# 1862| v1862_15(void) = ReturnValue : &:r1862_14, ~m?
|
||||
# 1862| v1862_16(void) = AliasedUse : ~m?
|
||||
# 1862| v1862_17(void) = ExitFunction :
|
||||
|
||||
# 1868| void missing_declaration_entries::test1()
|
||||
# 1868| Block 0
|
||||
# 1868| v1868_1(void) = EnterFunction :
|
||||
# 1868| mu1868_2(unknown) = AliasedDefinition :
|
||||
# 1868| mu1868_3(unknown) = InitializeNonLocal :
|
||||
# 1869| r1869_1(glval<Bar1<int>>) = VariableAddress[b] :
|
||||
# 1869| mu1869_2(Bar1<int>) = Uninitialized[b] : &:r1869_1
|
||||
# 1870| r1870_1(glval<Bar1<int>>) = VariableAddress[b] :
|
||||
# 1870| r1870_2(glval<unknown>) = FunctionAddress[missing_type_decl_entry] :
|
||||
# 1870| r1870_3(S *) = Constant[0] :
|
||||
# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3
|
||||
# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m?
|
||||
# 1870| v1870_6(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, ~m?
|
||||
# 1870| v1870_7(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m?
|
||||
# 1870| mu1870_8(Bar1<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1
|
||||
# 1870| mu1870_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3
|
||||
# 1871| v1871_1(void) = NoOp :
|
||||
# 1868| v1868_4(void) = ReturnVoid :
|
||||
# 1868| v1868_5(void) = AliasedUse : ~m?
|
||||
# 1868| v1868_6(void) = ExitFunction :
|
||||
|
||||
# 1875| int missing_declaration_entries::Bar2<int>::two_missing_variable_declaration_entries()
|
||||
# 1875| Block 0
|
||||
# 1875| v1875_1(void) = EnterFunction :
|
||||
# 1875| mu1875_2(unknown) = AliasedDefinition :
|
||||
# 1875| mu1875_3(unknown) = InitializeNonLocal :
|
||||
# 1875| r1875_4(glval<unknown>) = VariableAddress[#this] :
|
||||
# 1875| mu1875_5(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1875_4
|
||||
# 1875| r1875_6(glval<Bar2<int>>) = Load[#this] : &:r1875_4, ~m?
|
||||
# 1875| mu1875_7(Bar2<int>) = InitializeIndirection[#this] : &:r1875_6
|
||||
# 1877| r1877_1(int) = Constant[10] :
|
||||
# 1877| r1877_2(glval<int[10]>) = VariableAddress[x] :
|
||||
# 1877| r1877_3(int *) = Convert : r1877_2
|
||||
# 1877| r1877_4(glval<int>) = CopyValue : r1877_3
|
||||
# 1877| mu1877_5(int) = Store[?] : &:r1877_4, r1877_1
|
||||
# 1878| r1878_1(int) = Constant[10] :
|
||||
# 1878| r1878_2(glval<int[10]>) = VariableAddress[y] :
|
||||
# 1878| r1878_3(int *) = Convert : r1878_2
|
||||
# 1878| r1878_4(glval<int>) = CopyValue : r1878_3
|
||||
# 1878| mu1878_5(int) = Store[?] : &:r1878_4, r1878_1
|
||||
# 1879| r1879_1(glval<int>) = VariableAddress[#return] :
|
||||
# 1879| r1879_2(glval<int[10]>) = VariableAddress[x] :
|
||||
# 1879| r1879_3(int *) = Convert : r1879_2
|
||||
# 1879| r1879_4(int) = Load[?] : &:r1879_3, ~m?
|
||||
# 1879| r1879_5(glval<int[10]>) = VariableAddress[y] :
|
||||
# 1879| r1879_6(int *) = Convert : r1879_5
|
||||
# 1879| r1879_7(int) = Load[?] : &:r1879_6, ~m?
|
||||
# 1879| r1879_8(int) = Add : r1879_4, r1879_7
|
||||
# 1879| mu1879_9(int) = Store[#return] : &:r1879_1, r1879_8
|
||||
# 1875| v1875_8(void) = ReturnIndirection[#this] : &:r1875_6, ~m?
|
||||
# 1875| r1875_9(glval<int>) = VariableAddress[#return] :
|
||||
# 1875| v1875_10(void) = ReturnValue : &:r1875_9, ~m?
|
||||
# 1875| v1875_11(void) = AliasedUse : ~m?
|
||||
# 1875| v1875_12(void) = ExitFunction :
|
||||
|
||||
# 1883| void missing_declaration_entries::test2()
|
||||
# 1883| Block 0
|
||||
# 1883| v1883_1(void) = EnterFunction :
|
||||
# 1883| mu1883_2(unknown) = AliasedDefinition :
|
||||
# 1883| mu1883_3(unknown) = InitializeNonLocal :
|
||||
# 1884| r1884_1(glval<Bar2<int>>) = VariableAddress[b] :
|
||||
# 1884| mu1884_2(Bar2<int>) = Uninitialized[b] : &:r1884_1
|
||||
# 1885| r1885_1(glval<Bar2<int>>) = VariableAddress[b] :
|
||||
# 1885| r1885_2(glval<unknown>) = FunctionAddress[two_missing_variable_declaration_entries] :
|
||||
# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1
|
||||
# 1885| mu1885_4(unknown) = ^CallSideEffect : ~m?
|
||||
# 1885| v1885_5(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, ~m?
|
||||
# 1885| mu1885_6(Bar2<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1
|
||||
# 1886| v1886_1(void) = NoOp :
|
||||
# 1883| v1883_4(void) = ReturnVoid :
|
||||
# 1883| v1883_5(void) = AliasedUse : ~m?
|
||||
# 1883| v1883_6(void) = ExitFunction :
|
||||
|
||||
perf-regression.cpp:
|
||||
# 6| void Big::Big()
|
||||
# 6| Block 0
|
||||
|
||||
Reference in New Issue
Block a user