C++: Add tests showing missing destructors for initialization statements

Incidentially this also shows that for contructs like `if (char x = ...)`, so
there is an initialization but not initializer statement, the initialization
is not displayed in the AST, although the IR does contain the initialization.
This commit is contained in:
Jeroen Ketema
2024-03-21 09:40:00 +01:00
parent ec071cde51
commit 84646cd795
5 changed files with 1150 additions and 0 deletions

View File

@@ -9872,6 +9872,10 @@ ir.cpp:
# 1078| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &
# 1078| [CopyAssignmentOperator] std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>& std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>::operator=(std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&> const&)
# 1078| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &
# 1078| [CopyAssignmentOperator] std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator=(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&> const&)
# 1078| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
@@ -9890,6 +9894,10 @@ ir.cpp:
# 1082| <params>:
# 1082| getParameter(0): [Parameter] other
# 1082| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &
# 1082| [CopyConstructor] void std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>::iterator(std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&> const&)
# 1082| <params>:
# 1082| getParameter(0): [Parameter] other
# 1082| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &
# 1082| [CopyConstructor] void std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::iterator(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&> const&)
# 1082| <params>:
# 1082| getParameter(0): [Parameter] other
@@ -9900,6 +9908,8 @@ ir.cpp:
# 1084| <params>:
# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>& std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator++()
# 1084| <params>:
# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>& std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>::operator++()
# 1084| <params>:
# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator++()
# 1084| <params>:
# 1085| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type> std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator++(int)
@@ -9928,6 +9938,10 @@ ir.cpp:
# 1089| <params>:
# 1089| getParameter(0): [Parameter] other
# 1089| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>
# 1089| [ConstMemberFunction] bool std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>::operator!=(std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>) const
# 1089| <params>:
# 1089| getParameter(0): [Parameter] other
# 1089| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
# 1089| [ConstMemberFunction] bool std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator!=(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>) const
# 1089| <params>:
# 1089| getParameter(0): [Parameter] other
@@ -9936,6 +9950,8 @@ ir.cpp:
# 1090| <params>:
# 1090| [ConstMemberFunction] String& std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator*() const
# 1090| <params>:
# 1090| [ConstMemberFunction] char& std::iterator<std::random_access_iterator_tag, char, std::ptrdiff_t, char*, char&>::operator*() const
# 1090| <params>:
# 1090| [ConstMemberFunction] int& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator*() const
# 1090| <params>:
# 1090| [ConstMemberFunction] reference_type std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator*() const
@@ -10020,6 +10036,10 @@ ir.cpp:
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const vector<String> &
# 1108| [CopyAssignmentOperator] std::vector<char>& std::vector<char>::operator=(std::vector<char> const&)
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const vector<char> &
# 1108| [CopyAssignmentOperator] std::vector<int>& std::vector<int>::operator=(std::vector<int> const&)
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
@@ -10032,6 +10052,10 @@ ir.cpp:
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const vector<String> &
# 1108| [CopyConstructor] void std::vector<char>::vector(std::vector<char> const&)
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const vector<char> &
# 1108| [CopyConstructor] void std::vector<int>::vector(std::vector<int> const&)
# 1108| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
@@ -10048,6 +10072,10 @@ ir.cpp:
# 1109| <params>:
# 1109| getParameter(0): [Parameter] (unnamed parameter 0)
# 1109| Type = [TemplateParameter] T
# 1109| [Constructor] void std::vector<char>::vector(char)
# 1109| <params>:
# 1109| getParameter(0): [Parameter] (unnamed parameter 0)
# 1109| Type = [PlainCharType] char
# 1109| [Constructor] void std::vector<int>::vector(int)
# 1109| <params>:
# 1109| getParameter(0): [Parameter] (unnamed parameter 0)
@@ -10064,6 +10092,8 @@ ir.cpp:
# 1115| <params>:
# 1115| [ConstMemberFunction] std::vector<T>::iterator std::vector<T>::begin() const
# 1115| <params>:
# 1115| [ConstMemberFunction] std::vector<char>::iterator std::vector<char>::begin() const
# 1115| <params>:
# 1115| [ConstMemberFunction] std::vector<int>::iterator std::vector<int>::begin() const
# 1115| <params>:
# 1116| [ConstMemberFunction] std::vector<ClassWithDestructor>::iterator std::vector<ClassWithDestructor>::end() const
@@ -10072,6 +10102,8 @@ ir.cpp:
# 1116| <params>:
# 1116| [ConstMemberFunction] std::vector<T>::iterator std::vector<T>::end() const
# 1116| <params>:
# 1116| [ConstMemberFunction] std::vector<char>::iterator std::vector<char>::end() const
# 1116| <params>:
# 1116| [ConstMemberFunction] std::vector<int>::iterator std::vector<int>::end() const
# 1116| <params>:
# 1120| [Operator,TemplateFunction,TopLevelFunction] bool std::operator==<T>(iterator, iterator)
@@ -19636,6 +19668,278 @@ ir.cpp:
# 2393| Type = [IntType] int
# 2393| Value = [ParenthesisExpr] 0
# 2393| ValueCategory = prvalue
# 2396| [TopLevelFunction] void initialization_with_temp_destructor()
# 2396| <params>:
# 2396| getEntryPoint(): [BlockStmt] { ... }
# 2397| getStmt(0): [IfStmt] if (...) ...
# 2397| getCondition(): [ConditionDeclExpr] (condition decl)
# 2397| Type = [BoolType] bool
# 2397| ValueCategory = prvalue
# 2397| getVariableAccess(): [VariableAccess] x
# 2397| Type = [PlainCharType] char
# 2397| ValueCategory = prvalue(load)
# 2397| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)...
# 2397| Conversion = [BoolConversion] conversion to bool
# 2397| Type = [BoolType] bool
# 2397| ValueCategory = prvalue
# 2398| getThen(): [ExprStmt] ExprStmt
# 2398| getExpr(): [PostfixIncrExpr] ... ++
# 2398| Type = [PlainCharType] char
# 2398| ValueCategory = prvalue
# 2398| getOperand(): [VariableAccess] x
# 2398| Type = [PlainCharType] char
# 2398| ValueCategory = lvalue
# 2400| getStmt(1): [IfStmt] if (...) ...
# 2400| getInitialization(): [DeclStmt] declaration
# 2400| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
# 2400| Type = [PlainCharType] char
# 2400| getVariable().getInitializer(): [Initializer] initializer for x
# 2400| getExpr(): [FunctionCall] call to get_x
# 2400| Type = [PlainCharType] char
# 2400| ValueCategory = prvalue
# 2400| getQualifier(): [ConstructorCall] call to ClassWithDestructor
# 2400| Type = [VoidType] void
# 2400| ValueCategory = prvalue
# 2400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object
# 2400| Type = [Class] ClassWithDestructor
# 2400| ValueCategory = prvalue(load)
# 2400| getCondition(): [VariableAccess] x
# 2400| Type = [PlainCharType] char
# 2400| ValueCategory = prvalue(load)
# 2401| getThen(): [ExprStmt] ExprStmt
# 2401| getExpr(): [PostfixIncrExpr] ... ++
# 2401| Type = [PlainCharType] char
# 2401| ValueCategory = prvalue
# 2401| getOperand(): [VariableAccess] x
# 2401| Type = [PlainCharType] char
# 2401| ValueCategory = lvalue
# 2400| getCondition().getFullyConverted(): [CStyleCast] (bool)...
# 2400| Conversion = [BoolConversion] conversion to bool
# 2400| Type = [BoolType] bool
# 2400| ValueCategory = prvalue
# 2403| getStmt(2): [ConstexprIfStmt] if constexpr (...) ...
# 2403| getInitialization(): [DeclStmt] declaration
# 2403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
# 2403| Type = [PlainCharType] char
# 2403| getVariable().getInitializer(): [Initializer] initializer for x
# 2403| getExpr(): [FunctionCall] call to get_x
# 2403| Type = [PlainCharType] char
# 2403| ValueCategory = prvalue
# 2403| getQualifier(): [ConstructorCall] call to ClassWithDestructor
# 2403| Type = [VoidType] void
# 2403| ValueCategory = prvalue
# 2403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object
# 2403| Type = [Class] ClassWithDestructor
# 2403| ValueCategory = prvalue(load)
# 2403| getCondition(): [VariableAccess] initialization_with_destructor_bool
# 2403| Type = [BoolType] bool
# 2403| Value = [VariableAccess] 1
# 2403| ValueCategory = prvalue(load)
# 2404| getThen(): [ExprStmt] ExprStmt
# 2404| getExpr(): [PostfixIncrExpr] ... ++
# 2404| Type = [PlainCharType] char
# 2404| ValueCategory = prvalue
# 2404| getOperand(): [VariableAccess] x
# 2404| Type = [PlainCharType] char
# 2404| ValueCategory = lvalue
# 2406| getStmt(3): [SwitchStmt] switch (...) ...
# 2406| getExpr(): [ConditionDeclExpr] (condition decl)
# 2406| Type = [IntType] int
# 2406| ValueCategory = prvalue
# 2406| getVariableAccess(): [VariableAccess] x
# 2406| Type = [PlainCharType] char
# 2406| ValueCategory = prvalue(load)
# 2406| getVariableAccess().getFullyConverted(): [CStyleCast] (int)...
# 2406| Conversion = [IntegralConversion] integral conversion
# 2406| Type = [IntType] int
# 2406| ValueCategory = prvalue
# 2406| getStmt(): [BlockStmt] { ... }
# 2407| getStmt(0): [SwitchCase] case ...:
# 2407| getExpr(): [CharLiteral] 97
# 2407| Type = [PlainCharType] char
# 2407| Value = [CharLiteral] 97
# 2407| ValueCategory = prvalue
# 2407| getExpr().getFullyConverted(): [CStyleCast] (int)...
# 2407| Conversion = [IntegralConversion] integral conversion
# 2407| Type = [IntType] int
# 2407| Value = [CStyleCast] 97
# 2407| ValueCategory = prvalue
# 2408| getStmt(1): [ExprStmt] ExprStmt
# 2408| getExpr(): [PostfixIncrExpr] ... ++
# 2408| Type = [PlainCharType] char
# 2408| ValueCategory = prvalue
# 2408| getOperand(): [VariableAccess] x
# 2408| Type = [PlainCharType] char
# 2408| ValueCategory = lvalue
# 2411| getStmt(4): [SwitchStmt] switch (...) ...
# 2411| getInitialization(): [DeclStmt] declaration
# 2411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
# 2411| Type = [PlainCharType] char
# 2411| getVariable().getInitializer(): [Initializer] initializer for x
# 2411| getExpr(): [FunctionCall] call to get_x
# 2411| Type = [PlainCharType] char
# 2411| ValueCategory = prvalue
# 2411| getQualifier(): [ConstructorCall] call to ClassWithDestructor
# 2411| Type = [VoidType] void
# 2411| ValueCategory = prvalue
# 2411| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object
# 2411| Type = [Class] ClassWithDestructor
# 2411| ValueCategory = prvalue(load)
# 2411| getExpr(): [VariableAccess] x
# 2411| Type = [PlainCharType] char
# 2411| ValueCategory = prvalue(load)
# 2411| getStmt(): [BlockStmt] { ... }
# 2412| getStmt(0): [SwitchCase] case ...:
# 2412| getExpr(): [CharLiteral] 97
# 2412| Type = [PlainCharType] char
# 2412| Value = [CharLiteral] 97
# 2412| ValueCategory = prvalue
# 2412| getExpr().getFullyConverted(): [CStyleCast] (int)...
# 2412| Conversion = [IntegralConversion] integral conversion
# 2412| Type = [IntType] int
# 2412| Value = [CStyleCast] 97
# 2412| ValueCategory = prvalue
# 2413| getStmt(1): [ExprStmt] ExprStmt
# 2413| getExpr(): [PostfixIncrExpr] ... ++
# 2413| Type = [PlainCharType] char
# 2413| ValueCategory = prvalue
# 2413| getOperand(): [VariableAccess] x
# 2413| Type = [PlainCharType] char
# 2413| ValueCategory = lvalue
# 2411| getExpr().getFullyConverted(): [CStyleCast] (int)...
# 2411| Conversion = [IntegralConversion] integral conversion
# 2411| Type = [IntType] int
# 2411| ValueCategory = prvalue
# 2416| getStmt(5): [RangeBasedForStmt] for(...:...) ...
# 2416| getInitialization(): [DeclStmt] declaration
# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x
# 2416| Type = [PlainCharType] char
# 2416| getVariable().getInitializer(): [Initializer] initializer for x
# 2416| getExpr(): [FunctionCall] call to get_x
# 2416| Type = [PlainCharType] char
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [ConstructorCall] call to ClassWithDestructor
# 2416| Type = [VoidType] void
# 2416| ValueCategory = prvalue
# 2416| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object
# 2416| Type = [Class] ClassWithDestructor
# 2416| ValueCategory = prvalue(load)
# 2416| getChild(1): [DeclStmt] declaration
# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range)
# 2416| Type = [RValueReferenceType] vector<char> &&
#-----| getVariable().getInitializer(): [Initializer] initializer for (__range)
# 2416| getExpr(): [ConstructorCall] call to vector
# 2416| Type = [VoidType] void
# 2416| ValueCategory = prvalue
# 2416| getArgument(0): [VariableAccess] x
# 2416| Type = [PlainCharType] char
# 2416| ValueCategory = prvalue(load)
# 2416| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to)
# 2416| Type = [LValueReferenceType] vector<char> &
# 2416| ValueCategory = prvalue
# 2416| getExpr(): [TemporaryObjectExpr] temporary object
# 2416| Type = [ClassTemplateInstantiation,Struct] vector<char>
# 2416| ValueCategory = xvalue
# 2416| getBeginEndDeclaration(): [DeclStmt] declaration
# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin)
# 2416| getExpr(): [FunctionCall] call to begin
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [VariableAccess] (__range)
# 2416| Type = [RValueReferenceType] vector<char> &&
# 2416| ValueCategory = prvalue(load)
#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<char>)...
#-----| Conversion = [GlvalueConversion] glvalue conversion
#-----| Type = [SpecifiedType] const vector<char>
#-----| ValueCategory = lvalue
#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [ClassTemplateInstantiation,Struct] vector<char>
#-----| ValueCategory = lvalue
# 2416| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
#-----| getVariable().getInitializer(): [Initializer] initializer for (__end)
# 2416| getExpr(): [FunctionCall] call to end
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [VariableAccess] (__range)
# 2416| Type = [RValueReferenceType] vector<char> &&
# 2416| ValueCategory = prvalue(load)
#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<char>)...
#-----| Conversion = [GlvalueConversion] glvalue conversion
#-----| Type = [SpecifiedType] const vector<char>
#-----| ValueCategory = lvalue
#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference)
#-----| Type = [ClassTemplateInstantiation,Struct] vector<char>
#-----| ValueCategory = lvalue
# 2416| getCondition(): [FunctionCall] call to operator!=
# 2416| Type = [BoolType] bool
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [VariableAccess] (__begin)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = lvalue
# 2416| getArgument(0): [ConstructorCall] call to iterator
# 2416| Type = [VoidType] void
# 2416| ValueCategory = prvalue
# 2416| getArgument(0): [VariableAccess] (__end)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = lvalue
#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to)
#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &
#-----| ValueCategory = prvalue
#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>)...
#-----| Conversion = [GlvalueConversion] glvalue conversion
#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
#-----| ValueCategory = lvalue
#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>)...
#-----| Conversion = [GlvalueConversion] glvalue conversion
#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
#-----| ValueCategory = lvalue
#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object
#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
#-----| ValueCategory = lvalue
# 2416| getUpdate(): [FunctionCall] call to operator++
# 2416| Type = [LValueReferenceType] iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [VariableAccess] (__begin)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = lvalue
# 2416| getChild(5): [DeclStmt] declaration
# 2416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y
# 2416| Type = [PlainCharType] char
# 2416| getVariable().getInitializer(): [Initializer] initializer for y
# 2416| getExpr(): [OverloadedPointerDereferenceExpr] call to operator*
# 2416| Type = [LValueReferenceType] char &
# 2416| ValueCategory = prvalue
# 2416| getQualifier(): [VariableAccess] (__begin)
# 2416| Type = [NestedTypedefType,UsingAliasTypedefType] iterator
# 2416| ValueCategory = lvalue
#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>)...
#-----| Conversion = [GlvalueConversion] glvalue conversion
#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
#-----| ValueCategory = lvalue
# 2416| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 2416| Type = [PlainCharType] char
# 2416| ValueCategory = prvalue(load)
# 2417| getStmt(): [ExprStmt] ExprStmt
# 2417| getExpr(): [AssignAddExpr] ... += ...
# 2417| Type = [PlainCharType] char
# 2417| ValueCategory = lvalue
# 2417| getLValue(): [VariableAccess] y
# 2417| Type = [PlainCharType] char
# 2417| ValueCategory = lvalue
# 2417| getRValue(): [VariableAccess] x
# 2417| Type = [PlainCharType] char
# 2417| ValueCategory = prvalue(load)
# 2417| getRValue().getFullyConverted(): [CStyleCast] (int)...
# 2417| Conversion = [IntegralConversion] integral conversion
# 2417| Type = [IntType] int
# 2417| ValueCategory = prvalue
# 2416| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 2416| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>
# 2416| ValueCategory = lvalue
# 2418| getStmt(6): [ReturnStmt] return ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| <params>:

View File

@@ -15165,6 +15165,295 @@ ir.cpp:
# 2392| v2392_7(void) = AliasedUse : m2392_3
# 2392| v2392_8(void) = ExitFunction :
# 2396| void initialization_with_temp_destructor()
# 2396| Block 0
# 2396| v2396_1(void) = EnterFunction :
# 2396| m2396_2(unknown) = AliasedDefinition :
# 2396| m2396_3(unknown) = InitializeNonLocal :
# 2396| m2396_4(unknown) = Chi : total:m2396_2, partial:m2396_3
# 2397| r2397_1(glval<char>) = VariableAddress[x] :
# 2397| r2397_2(glval<ClassWithDestructor>) = VariableAddress[#temp2397:18] :
# 2397| m2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2
# 2397| r2397_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2
# 2397| m2397_6(unknown) = ^CallSideEffect : ~m2396_4
# 2397| m2397_7(unknown) = Chi : total:m2396_4, partial:m2397_6
# 2397| m2397_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2
# 2397| m2397_9(ClassWithDestructor) = Chi : total:m2397_3, partial:m2397_8
# 2397| r2397_10(glval<unknown>) = FunctionAddress[get_x] :
# 2397| r2397_11(char) = Call[get_x] : func:r2397_10, this:r2397_2
# 2397| m2397_12(unknown) = ^CallSideEffect : ~m2397_7
# 2397| m2397_13(unknown) = Chi : total:m2397_7, partial:m2397_12
# 2397| v2397_14(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, m2397_9
# 2397| m2397_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2
# 2397| m2397_16(ClassWithDestructor) = Chi : total:m2397_9, partial:m2397_15
# 2397| m2397_17(char) = Store[x] : &:r2397_1, r2397_11
# 2397| r2397_18(glval<char>) = VariableAddress[x] :
# 2397| r2397_19(char) = Load[x] : &:r2397_18, m2397_17
# 2397| r2397_20(char) = Constant[0] :
# 2397| r2397_21(bool) = CompareNE : r2397_19, r2397_20
# 2397| r2397_22(bool) = CopyValue : r2397_21
# 2397| v2397_23(void) = ConditionalBranch : r2397_22
#-----| False -> Block 2
#-----| True -> Block 1
# 2398| Block 1
# 2398| r2398_1(glval<char>) = VariableAddress[x] :
# 2398| r2398_2(char) = Load[x] : &:r2398_1, m2397_17
# 2398| r2398_3(char) = Constant[1] :
# 2398| r2398_4(char) = Add : r2398_2, r2398_3
# 2398| m2398_5(char) = Store[x] : &:r2398_1, r2398_4
#-----| Goto -> Block 2
# 2400| Block 2
# 2400| r2400_1(glval<char>) = VariableAddress[x] :
# 2400| r2400_2(glval<ClassWithDestructor>) = VariableAddress[#temp2400:18] :
# 2400| m2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2
# 2400| r2400_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2
# 2400| m2400_6(unknown) = ^CallSideEffect : ~m2397_13
# 2400| m2400_7(unknown) = Chi : total:m2397_13, partial:m2400_6
# 2400| m2400_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2
# 2400| m2400_9(ClassWithDestructor) = Chi : total:m2400_3, partial:m2400_8
# 2400| r2400_10(glval<unknown>) = FunctionAddress[get_x] :
# 2400| r2400_11(char) = Call[get_x] : func:r2400_10, this:r2400_2
# 2400| m2400_12(unknown) = ^CallSideEffect : ~m2400_7
# 2400| m2400_13(unknown) = Chi : total:m2400_7, partial:m2400_12
# 2400| v2400_14(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, m2400_9
# 2400| m2400_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2
# 2400| m2400_16(ClassWithDestructor) = Chi : total:m2400_9, partial:m2400_15
# 2400| m2400_17(char) = Store[x] : &:r2400_1, r2400_11
# 2400| r2400_18(glval<char>) = VariableAddress[x] :
# 2400| r2400_19(char) = Load[x] : &:r2400_18, m2400_17
# 2400| r2400_20(char) = Constant[0] :
# 2400| r2400_21(bool) = CompareNE : r2400_19, r2400_20
# 2400| v2400_22(void) = ConditionalBranch : r2400_21
#-----| False -> Block 4
#-----| True -> Block 3
# 2401| Block 3
# 2401| r2401_1(glval<char>) = VariableAddress[x] :
# 2401| r2401_2(char) = Load[x] : &:r2401_1, m2400_17
# 2401| r2401_3(char) = Constant[1] :
# 2401| r2401_4(char) = Add : r2401_2, r2401_3
# 2401| m2401_5(char) = Store[x] : &:r2401_1, r2401_4
#-----| Goto -> Block 4
# 2403| Block 4
# 2403| r2403_1(glval<char>) = VariableAddress[x] :
# 2403| r2403_2(glval<ClassWithDestructor>) = VariableAddress[#temp2403:28] :
# 2403| m2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2
# 2403| r2403_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2
# 2403| m2403_6(unknown) = ^CallSideEffect : ~m2400_13
# 2403| m2403_7(unknown) = Chi : total:m2400_13, partial:m2403_6
# 2403| m2403_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2
# 2403| m2403_9(ClassWithDestructor) = Chi : total:m2403_3, partial:m2403_8
# 2403| r2403_10(glval<unknown>) = FunctionAddress[get_x] :
# 2403| r2403_11(char) = Call[get_x] : func:r2403_10, this:r2403_2
# 2403| m2403_12(unknown) = ^CallSideEffect : ~m2403_7
# 2403| m2403_13(unknown) = Chi : total:m2403_7, partial:m2403_12
# 2403| v2403_14(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, m2403_9
# 2403| m2403_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2
# 2403| m2403_16(ClassWithDestructor) = Chi : total:m2403_9, partial:m2403_15
# 2403| m2403_17(char) = Store[x] : &:r2403_1, r2403_11
# 2403| r2403_18(bool) = Constant[1] :
# 2403| v2403_19(void) = ConditionalBranch : r2403_18
#-----| False -> Block 13
#-----| True -> Block 5
# 2404| Block 5
# 2404| r2404_1(glval<char>) = VariableAddress[x] :
# 2404| r2404_2(char) = Load[x] : &:r2404_1, m2403_17
# 2404| r2404_3(char) = Constant[1] :
# 2404| r2404_4(char) = Add : r2404_2, r2404_3
# 2404| m2404_5(char) = Store[x] : &:r2404_1, r2404_4
# 2406| r2406_1(glval<char>) = VariableAddress[x] :
# 2406| r2406_2(glval<ClassWithDestructor>) = VariableAddress[#temp2406:21] :
# 2406| m2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2
# 2406| r2406_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2
# 2406| m2406_6(unknown) = ^CallSideEffect : ~m2403_13
# 2406| m2406_7(unknown) = Chi : total:m2403_13, partial:m2406_6
# 2406| m2406_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2
# 2406| m2406_9(ClassWithDestructor) = Chi : total:m2406_3, partial:m2406_8
# 2406| r2406_10(glval<unknown>) = FunctionAddress[get_x] :
# 2406| r2406_11(char) = Call[get_x] : func:r2406_10, this:r2406_2
# 2406| m2406_12(unknown) = ^CallSideEffect : ~m2406_7
# 2406| m2406_13(unknown) = Chi : total:m2406_7, partial:m2406_12
# 2406| v2406_14(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, m2406_9
# 2406| m2406_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2
# 2406| m2406_16(ClassWithDestructor) = Chi : total:m2406_9, partial:m2406_15
# 2406| m2406_17(char) = Store[x] : &:r2406_1, r2406_11
# 2406| r2406_18(glval<char>) = VariableAddress[x] :
# 2406| r2406_19(char) = Load[x] : &:r2406_18, m2406_17
# 2406| r2406_20(int) = Convert : r2406_19
# 2406| r2406_21(int) = CopyValue : r2406_20
# 2406| v2406_22(void) = Switch : r2406_21
#-----| Case[97] -> Block 6
#-----| Default -> Block 7
# 2407| Block 6
# 2407| v2407_1(void) = NoOp :
# 2408| r2408_1(glval<char>) = VariableAddress[x] :
# 2408| r2408_2(char) = Load[x] : &:r2408_1, m2406_17
# 2408| r2408_3(char) = Constant[1] :
# 2408| r2408_4(char) = Add : r2408_2, r2408_3
# 2408| m2408_5(char) = Store[x] : &:r2408_1, r2408_4
#-----| Goto -> Block 7
# 2411| Block 7
# 2411| r2411_1(glval<char>) = VariableAddress[x] :
# 2411| r2411_2(glval<ClassWithDestructor>) = VariableAddress[#temp2411:21] :
# 2411| m2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2
# 2411| r2411_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2
# 2411| m2411_6(unknown) = ^CallSideEffect : ~m2406_13
# 2411| m2411_7(unknown) = Chi : total:m2406_13, partial:m2411_6
# 2411| m2411_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2
# 2411| m2411_9(ClassWithDestructor) = Chi : total:m2411_3, partial:m2411_8
# 2411| r2411_10(glval<unknown>) = FunctionAddress[get_x] :
# 2411| r2411_11(char) = Call[get_x] : func:r2411_10, this:r2411_2
# 2411| m2411_12(unknown) = ^CallSideEffect : ~m2411_7
# 2411| m2411_13(unknown) = Chi : total:m2411_7, partial:m2411_12
# 2411| v2411_14(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, m2411_9
# 2411| m2411_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2
# 2411| m2411_16(ClassWithDestructor) = Chi : total:m2411_9, partial:m2411_15
# 2411| m2411_17(char) = Store[x] : &:r2411_1, r2411_11
# 2411| r2411_18(glval<char>) = VariableAddress[x] :
# 2411| r2411_19(char) = Load[x] : &:r2411_18, m2411_17
# 2411| r2411_20(int) = Convert : r2411_19
# 2411| v2411_21(void) = Switch : r2411_20
#-----| Case[97] -> Block 8
#-----| Default -> Block 9
# 2412| Block 8
# 2412| v2412_1(void) = NoOp :
# 2413| r2413_1(glval<char>) = VariableAddress[x] :
# 2413| r2413_2(char) = Load[x] : &:r2413_1, m2411_17
# 2413| r2413_3(char) = Constant[1] :
# 2413| r2413_4(char) = Add : r2413_2, r2413_3
# 2413| m2413_5(char) = Store[x] : &:r2413_1, r2413_4
#-----| Goto -> Block 9
# 2416| Block 9
# 2416| r2416_1(glval<char>) = VariableAddress[x] :
# 2416| r2416_2(glval<ClassWithDestructor>) = VariableAddress[#temp2416:18] :
# 2416| m2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2
# 2416| r2416_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2
# 2416| m2416_6(unknown) = ^CallSideEffect : ~m2411_13
# 2416| m2416_7(unknown) = Chi : total:m2411_13, partial:m2416_6
# 2416| m2416_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2
# 2416| m2416_9(ClassWithDestructor) = Chi : total:m2416_3, partial:m2416_8
# 2416| r2416_10(glval<unknown>) = FunctionAddress[get_x] :
# 2416| r2416_11(char) = Call[get_x] : func:r2416_10, this:r2416_2
# 2416| m2416_12(unknown) = ^CallSideEffect : ~m2416_7
# 2416| m2416_13(unknown) = Chi : total:m2416_7, partial:m2416_12
# 2416| v2416_14(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, m2416_9
# 2416| m2416_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2
# 2416| m2416_16(ClassWithDestructor) = Chi : total:m2416_9, partial:m2416_15
# 2416| m2416_17(char) = Store[x] : &:r2416_1, r2416_11
# 2416| r2416_18(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_19(glval<vector<char>>) = VariableAddress[#temp2416:58] :
# 2416| m2416_20(vector<char>) = Uninitialized[#temp2416:58] : &:r2416_19
# 2416| r2416_21(glval<unknown>) = FunctionAddress[vector] :
# 2416| r2416_22(glval<char>) = VariableAddress[x] :
# 2416| r2416_23(char) = Load[x] : &:r2416_22, m2416_17
# 2416| v2416_24(void) = Call[vector] : func:r2416_21, this:r2416_19, 0:r2416_23
# 2416| m2416_25(unknown) = ^CallSideEffect : ~m2416_13
# 2416| m2416_26(unknown) = Chi : total:m2416_13, partial:m2416_25
# 2416| m2416_27(vector<char>) = ^IndirectMayWriteSideEffect[-1] : &:r2416_19
# 2416| m2416_28(vector<char>) = Chi : total:m2416_20, partial:m2416_27
# 2416| r2416_29(vector<char> &) = CopyValue : r2416_19
# 2416| m2416_30(vector<char> &&) = Store[(__range)] : &:r2416_18, r2416_29
# 2416| r2416_31(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
# 2416| r2416_32(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_33(vector<char> &&) = Load[(__range)] : &:r2416_32, m2416_30
#-----| r0_1(glval<vector<char>>) = CopyValue : r2416_33
#-----| r0_2(glval<vector<char>>) = Convert : r0_1
# 2416| r2416_34(glval<unknown>) = FunctionAddress[begin] :
# 2416| r2416_35(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Call[begin] : func:r2416_34, this:r0_2
#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2416_28
# 2416| m2416_36(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Store[(__begin)] : &:r2416_31, r2416_35
# 2416| r2416_37(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__end)] :
# 2416| r2416_38(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_39(vector<char> &&) = Load[(__range)] : &:r2416_38, m2416_30
#-----| r0_4(glval<vector<char>>) = CopyValue : r2416_39
#-----| r0_5(glval<vector<char>>) = Convert : r0_4
# 2416| r2416_40(glval<unknown>) = FunctionAddress[end] :
# 2416| r2416_41(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Call[end] : func:r2416_40, this:r0_5
#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2416_28
# 2416| m2416_42(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Store[(__end)] : &:r2416_37, r2416_41
#-----| Goto -> Block 10
# 2416| Block 10
# 2416| m2416_43(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Phi : from 9:m2416_36, from 11:m2416_73
# 2416| m2416_44(unknown) = Phi : from 9:~m2416_26, from 11:~m2416_70
# 2416| r2416_45(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
#-----| r0_7(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_45
# 2416| r2416_46(glval<unknown>) = FunctionAddress[operator!=] :
#-----| r0_8(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[#temp0:0] :
#-----| m0_9(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Uninitialized[#temp0:0] : &:r0_8
# 2416| r2416_47(glval<unknown>) = FunctionAddress[iterator] :
# 2416| r2416_48(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__end)] :
#-----| r0_10(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_48
#-----| r0_11(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = CopyValue : r0_10
# 2416| v2416_49(void) = Call[iterator] : func:r2416_47, this:r0_8, 0:r0_11
# 2416| m2416_50(unknown) = ^CallSideEffect : ~m2416_44
# 2416| m2416_51(unknown) = Chi : total:m2416_44, partial:m2416_50
#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2416_42
# 2416| m2416_52(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8
# 2416| m2416_53(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Chi : total:m0_9, partial:m2416_52
#-----| r0_13(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Load[#temp0:0] : &:r0_8, m2416_53
# 2416| r2416_54(bool) = Call[operator!=] : func:r2416_46, this:r0_7, 0:r0_13
# 2416| m2416_55(unknown) = ^CallSideEffect : ~m2416_51
# 2416| m2416_56(unknown) = Chi : total:m2416_51, partial:m2416_55
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2416_43
# 2416| v2416_57(void) = ConditionalBranch : r2416_54
#-----| False -> Block 12
#-----| True -> Block 11
# 2416| Block 11
# 2416| r2416_58(glval<char>) = VariableAddress[y] :
# 2416| r2416_59(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
#-----| r0_15(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_59
# 2416| r2416_60(glval<unknown>) = FunctionAddress[operator*] :
# 2416| r2416_61(char &) = Call[operator*] : func:r2416_60, this:r0_15
# 2416| m2416_62(unknown) = ^CallSideEffect : ~m2416_56
# 2416| m2416_63(unknown) = Chi : total:m2416_56, partial:m2416_62
#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2416_43
# 2416| r2416_64(char) = Load[?] : &:r2416_61, ~m2416_63
# 2416| m2416_65(char) = Store[y] : &:r2416_58, r2416_64
# 2417| r2417_1(glval<char>) = VariableAddress[x] :
# 2417| r2417_2(char) = Load[x] : &:r2417_1, m2416_17
# 2417| r2417_3(int) = Convert : r2417_2
# 2417| r2417_4(glval<char>) = VariableAddress[y] :
# 2417| r2417_5(char) = Load[y] : &:r2417_4, m2416_65
# 2417| r2417_6(int) = Convert : r2417_5
# 2417| r2417_7(int) = Add : r2417_6, r2417_3
# 2417| r2417_8(char) = Convert : r2417_7
# 2417| m2417_9(char) = Store[y] : &:r2417_4, r2417_8
# 2416| r2416_66(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
# 2416| r2416_67(glval<unknown>) = FunctionAddress[operator++] :
# 2416| r2416_68(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = Call[operator++] : func:r2416_67, this:r2416_66
# 2416| m2416_69(unknown) = ^CallSideEffect : ~m2416_63
# 2416| m2416_70(unknown) = Chi : total:m2416_63, partial:m2416_69
# 2416| v2416_71(void) = ^IndirectReadSideEffect[-1] : &:r2416_66, m2416_43
# 2416| m2416_72(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r2416_66
# 2416| m2416_73(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Chi : total:m2416_43, partial:m2416_72
# 2416| r2416_74(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = CopyValue : r2416_68
#-----| Goto (back edge) -> Block 10
# 2418| Block 12
# 2418| v2418_1(void) = NoOp :
# 2396| v2396_5(void) = ReturnVoid :
# 2396| v2396_6(void) = AliasedUse : ~m2416_56
# 2396| v2396_7(void) = ExitFunction :
# 2396| Block 13
# 2396| v2396_8(void) = Unreached :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0

View File

@@ -2393,4 +2393,28 @@ int large_operation_should_be_constant_folded() {
return BINOP64(1);
}
void initialization_with_temp_destructor() {
if (char x = ClassWithDestructor().get_x())
x++;
if (char x = ClassWithDestructor().get_x(); x)
x++;
if constexpr (char x = ClassWithDestructor().get_x(); initialization_with_destructor_bool)
x++;
switch(char x = ClassWithDestructor().get_x()) {
case 'a':
x++;
}
switch(char x = ClassWithDestructor().get_x(); x) {
case 'a':
x++;
}
for(char x = ClassWithDestructor().get_x(); char y : std::vector<char>(x))
y += x;
}
// semmle-extractor-options: -std=c++20 --clang

View File

@@ -1127,6 +1127,7 @@
| file://:0:0:0:0 | Address | &:r0_2 |
| file://:0:0:0:0 | Address | &:r0_2 |
| file://:0:0:0:0 | Address | &:r0_2 |
| file://:0:0:0:0 | Address | &:r0_2 |
| file://:0:0:0:0 | Address | &:r0_3 |
| file://:0:0:0:0 | Address | &:r0_3 |
| file://:0:0:0:0 | Address | &:r0_3 |
@@ -1176,6 +1177,7 @@
| file://:0:0:0:0 | Address | &:r0_5 |
| file://:0:0:0:0 | Address | &:r0_5 |
| file://:0:0:0:0 | Address | &:r0_5 |
| file://:0:0:0:0 | Address | &:r0_5 |
| file://:0:0:0:0 | Address | &:r0_6 |
| file://:0:0:0:0 | Address | &:r0_6 |
| file://:0:0:0:0 | Address | &:r0_6 |
@@ -1186,6 +1188,10 @@
| file://:0:0:0:0 | Address | &:r0_7 |
| file://:0:0:0:0 | Address | &:r0_7 |
| file://:0:0:0:0 | Address | &:r0_7 |
| file://:0:0:0:0 | Address | &:r0_7 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
| file://:0:0:0:0 | Address | &:r0_8 |
@@ -1208,6 +1214,7 @@
| file://:0:0:0:0 | Address | &:r0_11 |
| file://:0:0:0:0 | Address | &:r0_11 |
| file://:0:0:0:0 | Address | &:r0_11 |
| file://:0:0:0:0 | Address | &:r0_11 |
| file://:0:0:0:0 | Address | &:r0_13 |
| file://:0:0:0:0 | Address | &:r0_13 |
| file://:0:0:0:0 | Address | &:r0_13 |
@@ -1217,6 +1224,7 @@
| file://:0:0:0:0 | Address | &:r0_15 |
| file://:0:0:0:0 | Address | &:r0_15 |
| file://:0:0:0:0 | Address | &:r0_15 |
| file://:0:0:0:0 | Address | &:r0_15 |
| file://:0:0:0:0 | Address | &:r0_16 |
| file://:0:0:0:0 | Address | &:r0_16 |
| file://:0:0:0:0 | Address | &:r0_16 |
@@ -1265,6 +1273,8 @@
| file://:0:0:0:0 | Arg(0) | 0:r0_11 |
| file://:0:0:0:0 | Arg(0) | 0:r0_11 |
| file://:0:0:0:0 | Arg(0) | 0:r0_11 |
| file://:0:0:0:0 | Arg(0) | 0:r0_11 |
| file://:0:0:0:0 | Arg(0) | 0:r0_13 |
| file://:0:0:0:0 | Arg(0) | 0:r0_13 |
| file://:0:0:0:0 | Arg(0) | 0:r0_13 |
| file://:0:0:0:0 | Arg(0) | 0:r0_15 |
@@ -1363,6 +1373,7 @@
| file://:0:0:0:0 | Load | m2210_36 |
| file://:0:0:0:0 | Load | m2215_40 |
| file://:0:0:0:0 | Load | m2293_46 |
| file://:0:0:0:0 | Load | m2416_53 |
| file://:0:0:0:0 | Load | ~m0_4 |
| file://:0:0:0:0 | Load | ~m1493_6 |
| file://:0:0:0:0 | Load | ~m1761_10 |
@@ -1412,6 +1423,10 @@
| file://:0:0:0:0 | SideEffect | m2293_21 |
| file://:0:0:0:0 | SideEffect | m2293_36 |
| file://:0:0:0:0 | SideEffect | m2293_36 |
| file://:0:0:0:0 | SideEffect | m2416_28 |
| file://:0:0:0:0 | SideEffect | m2416_28 |
| file://:0:0:0:0 | SideEffect | m2416_43 |
| file://:0:0:0:0 | SideEffect | m2416_43 |
| file://:0:0:0:0 | SideEffect | ~m0_4 |
| file://:0:0:0:0 | SideEffect | ~m0_4 |
| file://:0:0:0:0 | SideEffect | ~m0_4 |
@@ -1438,6 +1453,7 @@
| file://:0:0:0:0 | SideEffect | ~m2226_4 |
| file://:0:0:0:0 | SideEffect | ~m2233_6 |
| file://:0:0:0:0 | SideEffect | ~m2293_35 |
| file://:0:0:0:0 | SideEffect | ~m2416_42 |
| file://:0:0:0:0 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
| file://:0:0:0:0 | StoreValue | r0_1 |
@@ -1469,10 +1485,12 @@
| file://:0:0:0:0 | Unary | r0_1 |
| file://:0:0:0:0 | Unary | r0_1 |
| file://:0:0:0:0 | Unary | r0_1 |
| file://:0:0:0:0 | Unary | r0_1 |
| file://:0:0:0:0 | Unary | r0_2 |
| file://:0:0:0:0 | Unary | r0_3 |
| file://:0:0:0:0 | Unary | r0_4 |
| file://:0:0:0:0 | Unary | r0_4 |
| file://:0:0:0:0 | Unary | r0_4 |
| file://:0:0:0:0 | Unary | r0_5 |
| file://:0:0:0:0 | Unary | r0_5 |
| file://:0:0:0:0 | Unary | r0_6 |
@@ -1497,6 +1515,7 @@
| file://:0:0:0:0 | Unary | r0_10 |
| file://:0:0:0:0 | Unary | r0_10 |
| file://:0:0:0:0 | Unary | r0_10 |
| file://:0:0:0:0 | Unary | r0_10 |
| file://:0:0:0:0 | Unary | r0_11 |
| file://:0:0:0:0 | Unary | r0_12 |
| file://:0:0:0:0 | Unary | r0_14 |
@@ -12546,6 +12565,266 @@
| ir.cpp:2392:5:2392:45 | SideEffect | m2392_3 |
| ir.cpp:2393:5:2393:22 | Address | &:r2393_1 |
| ir.cpp:2393:12:2393:21 | StoreValue | r2393_2 |
| ir.cpp:2396:6:2396:40 | ChiPartial | partial:m2396_3 |
| ir.cpp:2396:6:2396:40 | ChiTotal | total:m2396_2 |
| ir.cpp:2396:6:2396:40 | SideEffect | ~m2416_56 |
| ir.cpp:2397:9:2397:46 | Address | &:r2397_1 |
| ir.cpp:2397:9:2397:46 | Condition | r2397_22 |
| ir.cpp:2397:14:2397:14 | Address | &:r2397_18 |
| ir.cpp:2397:14:2397:14 | Left | r2397_19 |
| ir.cpp:2397:14:2397:14 | Load | m2397_17 |
| ir.cpp:2397:14:2397:14 | Right | r2397_20 |
| ir.cpp:2397:14:2397:14 | Unary | r2397_21 |
| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 |
| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 |
| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 |
| ir.cpp:2397:18:2397:38 | Address | &:r2397_2 |
| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 |
| ir.cpp:2397:18:2397:38 | Arg(this) | this:r2397_2 |
| ir.cpp:2397:18:2397:38 | CallTarget | func:r2397_4 |
| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_6 |
| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_8 |
| ir.cpp:2397:18:2397:38 | ChiPartial | partial:m2397_15 |
| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2396_4 |
| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_3 |
| ir.cpp:2397:18:2397:38 | ChiTotal | total:m2397_9 |
| ir.cpp:2397:18:2397:38 | SideEffect | m2397_9 |
| ir.cpp:2397:18:2397:38 | SideEffect | ~m2396_4 |
| ir.cpp:2397:40:2397:44 | CallTarget | func:r2397_10 |
| ir.cpp:2397:40:2397:44 | ChiPartial | partial:m2397_12 |
| ir.cpp:2397:40:2397:44 | ChiTotal | total:m2397_7 |
| ir.cpp:2397:40:2397:44 | SideEffect | ~m2397_7 |
| ir.cpp:2397:40:2397:44 | StoreValue | r2397_11 |
| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 |
| ir.cpp:2398:9:2398:9 | Address | &:r2398_1 |
| ir.cpp:2398:9:2398:9 | Left | r2398_2 |
| ir.cpp:2398:9:2398:9 | Load | m2397_17 |
| ir.cpp:2398:9:2398:11 | Right | r2398_3 |
| ir.cpp:2398:9:2398:11 | StoreValue | r2398_4 |
| ir.cpp:2400:14:2400:14 | Address | &:r2400_1 |
| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 |
| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 |
| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 |
| ir.cpp:2400:18:2400:38 | Address | &:r2400_2 |
| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 |
| ir.cpp:2400:18:2400:38 | Arg(this) | this:r2400_2 |
| ir.cpp:2400:18:2400:38 | CallTarget | func:r2400_4 |
| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_6 |
| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_8 |
| ir.cpp:2400:18:2400:38 | ChiPartial | partial:m2400_15 |
| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2397_13 |
| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_3 |
| ir.cpp:2400:18:2400:38 | ChiTotal | total:m2400_9 |
| ir.cpp:2400:18:2400:38 | SideEffect | m2400_9 |
| ir.cpp:2400:18:2400:38 | SideEffect | ~m2397_13 |
| ir.cpp:2400:40:2400:44 | CallTarget | func:r2400_10 |
| ir.cpp:2400:40:2400:44 | ChiPartial | partial:m2400_12 |
| ir.cpp:2400:40:2400:44 | ChiTotal | total:m2400_7 |
| ir.cpp:2400:40:2400:44 | SideEffect | ~m2400_7 |
| ir.cpp:2400:40:2400:44 | StoreValue | r2400_11 |
| ir.cpp:2400:49:2400:49 | Address | &:r2400_18 |
| ir.cpp:2400:49:2400:49 | Condition | r2400_21 |
| ir.cpp:2400:49:2400:49 | Left | r2400_19 |
| ir.cpp:2400:49:2400:49 | Load | m2400_17 |
| ir.cpp:2400:49:2400:49 | Right | r2400_20 |
| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 |
| ir.cpp:2401:9:2401:9 | Address | &:r2401_1 |
| ir.cpp:2401:9:2401:9 | Left | r2401_2 |
| ir.cpp:2401:9:2401:9 | Load | m2400_17 |
| ir.cpp:2401:9:2401:11 | Right | r2401_3 |
| ir.cpp:2401:9:2401:11 | StoreValue | r2401_4 |
| ir.cpp:2403:24:2403:24 | Address | &:r2403_1 |
| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 |
| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 |
| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 |
| ir.cpp:2403:28:2403:48 | Address | &:r2403_2 |
| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 |
| ir.cpp:2403:28:2403:48 | Arg(this) | this:r2403_2 |
| ir.cpp:2403:28:2403:48 | CallTarget | func:r2403_4 |
| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_6 |
| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_8 |
| ir.cpp:2403:28:2403:48 | ChiPartial | partial:m2403_15 |
| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2400_13 |
| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_3 |
| ir.cpp:2403:28:2403:48 | ChiTotal | total:m2403_9 |
| ir.cpp:2403:28:2403:48 | SideEffect | m2403_9 |
| ir.cpp:2403:28:2403:48 | SideEffect | ~m2400_13 |
| ir.cpp:2403:50:2403:54 | CallTarget | func:r2403_10 |
| ir.cpp:2403:50:2403:54 | ChiPartial | partial:m2403_12 |
| ir.cpp:2403:50:2403:54 | ChiTotal | total:m2403_7 |
| ir.cpp:2403:50:2403:54 | SideEffect | ~m2403_7 |
| ir.cpp:2403:50:2403:54 | StoreValue | r2403_11 |
| ir.cpp:2403:59:2403:93 | Condition | r2403_18 |
| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 |
| ir.cpp:2404:9:2404:9 | Address | &:r2404_1 |
| ir.cpp:2404:9:2404:9 | Left | r2404_2 |
| ir.cpp:2404:9:2404:9 | Load | m2403_17 |
| ir.cpp:2404:9:2404:11 | Right | r2404_3 |
| ir.cpp:2404:9:2404:11 | StoreValue | r2404_4 |
| ir.cpp:2406:12:2406:49 | Address | &:r2406_1 |
| ir.cpp:2406:12:2406:49 | Condition | r2406_21 |
| ir.cpp:2406:17:2406:17 | Address | &:r2406_18 |
| ir.cpp:2406:17:2406:17 | Load | m2406_17 |
| ir.cpp:2406:17:2406:17 | Unary | r2406_19 |
| ir.cpp:2406:17:2406:17 | Unary | r2406_20 |
| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 |
| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 |
| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 |
| ir.cpp:2406:21:2406:41 | Address | &:r2406_2 |
| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 |
| ir.cpp:2406:21:2406:41 | Arg(this) | this:r2406_2 |
| ir.cpp:2406:21:2406:41 | CallTarget | func:r2406_4 |
| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_6 |
| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_8 |
| ir.cpp:2406:21:2406:41 | ChiPartial | partial:m2406_15 |
| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2403_13 |
| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_3 |
| ir.cpp:2406:21:2406:41 | ChiTotal | total:m2406_9 |
| ir.cpp:2406:21:2406:41 | SideEffect | m2406_9 |
| ir.cpp:2406:21:2406:41 | SideEffect | ~m2403_13 |
| ir.cpp:2406:43:2406:47 | CallTarget | func:r2406_10 |
| ir.cpp:2406:43:2406:47 | ChiPartial | partial:m2406_12 |
| ir.cpp:2406:43:2406:47 | ChiTotal | total:m2406_7 |
| ir.cpp:2406:43:2406:47 | SideEffect | ~m2406_7 |
| ir.cpp:2406:43:2406:47 | StoreValue | r2406_11 |
| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 |
| ir.cpp:2408:11:2408:11 | Address | &:r2408_1 |
| ir.cpp:2408:11:2408:11 | Left | r2408_2 |
| ir.cpp:2408:11:2408:11 | Load | m2406_17 |
| ir.cpp:2408:11:2408:13 | Right | r2408_3 |
| ir.cpp:2408:11:2408:13 | StoreValue | r2408_4 |
| ir.cpp:2411:17:2411:17 | Address | &:r2411_1 |
| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 |
| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 |
| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 |
| ir.cpp:2411:21:2411:41 | Address | &:r2411_2 |
| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 |
| ir.cpp:2411:21:2411:41 | Arg(this) | this:r2411_2 |
| ir.cpp:2411:21:2411:41 | CallTarget | func:r2411_4 |
| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_6 |
| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_8 |
| ir.cpp:2411:21:2411:41 | ChiPartial | partial:m2411_15 |
| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2406_13 |
| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_3 |
| ir.cpp:2411:21:2411:41 | ChiTotal | total:m2411_9 |
| ir.cpp:2411:21:2411:41 | SideEffect | m2411_9 |
| ir.cpp:2411:21:2411:41 | SideEffect | ~m2406_13 |
| ir.cpp:2411:43:2411:47 | CallTarget | func:r2411_10 |
| ir.cpp:2411:43:2411:47 | ChiPartial | partial:m2411_12 |
| ir.cpp:2411:43:2411:47 | ChiTotal | total:m2411_7 |
| ir.cpp:2411:43:2411:47 | SideEffect | ~m2411_7 |
| ir.cpp:2411:43:2411:47 | StoreValue | r2411_11 |
| ir.cpp:2411:52:2411:52 | Address | &:r2411_18 |
| ir.cpp:2411:52:2411:52 | Condition | r2411_20 |
| ir.cpp:2411:52:2411:52 | Load | m2411_17 |
| ir.cpp:2411:52:2411:52 | Unary | r2411_19 |
| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 |
| ir.cpp:2413:11:2413:11 | Address | &:r2413_1 |
| ir.cpp:2413:11:2413:11 | Left | r2413_2 |
| ir.cpp:2413:11:2413:11 | Load | m2411_17 |
| ir.cpp:2413:11:2413:13 | Right | r2413_3 |
| ir.cpp:2413:11:2413:13 | StoreValue | r2413_4 |
| ir.cpp:2416:5:2416:5 | Address | &:r2416_18 |
| ir.cpp:2416:5:2416:5 | Address | &:r2416_31 |
| ir.cpp:2416:5:2416:5 | Address | &:r2416_37 |
| ir.cpp:2416:14:2416:14 | Address | &:r2416_1 |
| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 |
| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 |
| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 |
| ir.cpp:2416:18:2416:38 | Address | &:r2416_2 |
| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 |
| ir.cpp:2416:18:2416:38 | Arg(this) | this:r2416_2 |
| ir.cpp:2416:18:2416:38 | CallTarget | func:r2416_4 |
| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_6 |
| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_8 |
| ir.cpp:2416:18:2416:38 | ChiPartial | partial:m2416_15 |
| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2411_13 |
| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_3 |
| ir.cpp:2416:18:2416:38 | ChiTotal | total:m2416_9 |
| ir.cpp:2416:18:2416:38 | SideEffect | m2416_9 |
| ir.cpp:2416:18:2416:38 | SideEffect | ~m2411_13 |
| ir.cpp:2416:40:2416:44 | CallTarget | func:r2416_10 |
| ir.cpp:2416:40:2416:44 | ChiPartial | partial:m2416_12 |
| ir.cpp:2416:40:2416:44 | ChiTotal | total:m2416_7 |
| ir.cpp:2416:40:2416:44 | SideEffect | ~m2416_7 |
| ir.cpp:2416:40:2416:44 | StoreValue | r2416_11 |
| ir.cpp:2416:54:2416:54 | Address | &:r2416_58 |
| ir.cpp:2416:58:2416:58 | Address | &:r2416_32 |
| ir.cpp:2416:58:2416:58 | Address | &:r2416_38 |
| ir.cpp:2416:58:2416:58 | Address | &:r2416_61 |
| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 |
| ir.cpp:2416:58:2416:58 | Address | &:r2416_66 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_2 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_5 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_7 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_8 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r0_15 |
| ir.cpp:2416:58:2416:58 | Arg(this) | this:r2416_66 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_34 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_40 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_46 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_47 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_60 |
| ir.cpp:2416:58:2416:58 | CallTarget | func:r2416_67 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_50 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_52 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_55 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_62 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_69 |
| ir.cpp:2416:58:2416:58 | ChiPartial | partial:m2416_72 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m0_9 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_43 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_44 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_51 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_56 |
| ir.cpp:2416:58:2416:58 | ChiTotal | total:m2416_63 |
| ir.cpp:2416:58:2416:58 | Condition | r2416_54 |
| ir.cpp:2416:58:2416:58 | Load | m2416_30 |
| ir.cpp:2416:58:2416:58 | Load | m2416_30 |
| ir.cpp:2416:58:2416:58 | Phi | from 9:m2416_36 |
| ir.cpp:2416:58:2416:58 | Phi | from 9:~m2416_26 |
| ir.cpp:2416:58:2416:58 | Phi | from 11:m2416_73 |
| ir.cpp:2416:58:2416:58 | Phi | from 11:~m2416_70 |
| ir.cpp:2416:58:2416:58 | SideEffect | m2416_43 |
| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_44 |
| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_51 |
| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_56 |
| ir.cpp:2416:58:2416:58 | SideEffect | ~m2416_63 |
| ir.cpp:2416:58:2416:58 | StoreValue | r2416_35 |
| ir.cpp:2416:58:2416:58 | StoreValue | r2416_41 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_33 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_39 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_45 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_48 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_59 |
| ir.cpp:2416:58:2416:58 | Unary | r2416_68 |
| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 |
| ir.cpp:2416:58:2416:77 | Address | &:r2416_19 |
| ir.cpp:2416:58:2416:77 | Arg(this) | this:r2416_19 |
| ir.cpp:2416:58:2416:77 | CallTarget | func:r2416_21 |
| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_25 |
| ir.cpp:2416:58:2416:77 | ChiPartial | partial:m2416_27 |
| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_13 |
| ir.cpp:2416:58:2416:77 | ChiTotal | total:m2416_20 |
| ir.cpp:2416:58:2416:77 | SideEffect | ~m2416_13 |
| ir.cpp:2416:58:2416:77 | StoreValue | r2416_29 |
| ir.cpp:2416:58:2416:77 | Unary | r2416_19 |
| ir.cpp:2416:58:2416:78 | Load | ~m2416_63 |
| ir.cpp:2416:58:2416:78 | StoreValue | r2416_64 |
| ir.cpp:2416:76:2416:76 | Address | &:r2416_22 |
| ir.cpp:2416:76:2416:76 | Arg(0) | 0:r2416_23 |
| ir.cpp:2416:76:2416:76 | Load | m2416_17 |
| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 |
| ir.cpp:2417:9:2417:9 | Address | &:r2417_4 |
| ir.cpp:2417:9:2417:9 | Load | m2416_65 |
| ir.cpp:2417:9:2417:9 | Unary | r2417_5 |
| ir.cpp:2417:9:2417:14 | Left | r2417_6 |
| ir.cpp:2417:9:2417:14 | StoreValue | r2417_8 |
| ir.cpp:2417:9:2417:14 | Unary | r2417_7 |
| ir.cpp:2417:14:2417:14 | Address | &:r2417_1 |
| ir.cpp:2417:14:2417:14 | Load | m2416_17 |
| ir.cpp:2417:14:2417:14 | Right | r2417_3 |
| ir.cpp:2417:14:2417:14 | Unary | r2417_2 |
| 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

@@ -14005,6 +14005,260 @@ ir.cpp:
# 2392| v2392_6(void) = AliasedUse : ~m?
# 2392| v2392_7(void) = ExitFunction :
# 2396| void initialization_with_temp_destructor()
# 2396| Block 0
# 2396| v2396_1(void) = EnterFunction :
# 2396| mu2396_2(unknown) = AliasedDefinition :
# 2396| mu2396_3(unknown) = InitializeNonLocal :
# 2397| r2397_1(glval<char>) = VariableAddress[x] :
# 2397| r2397_2(glval<ClassWithDestructor>) = VariableAddress[#temp2397:18] :
# 2397| mu2397_3(ClassWithDestructor) = Uninitialized[#temp2397:18] : &:r2397_2
# 2397| r2397_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2397| v2397_5(void) = Call[ClassWithDestructor] : func:r2397_4, this:r2397_2
# 2397| mu2397_6(unknown) = ^CallSideEffect : ~m?
# 2397| mu2397_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2
# 2397| r2397_8(glval<unknown>) = FunctionAddress[get_x] :
# 2397| r2397_9(char) = Call[get_x] : func:r2397_8, this:r2397_2
# 2397| mu2397_10(unknown) = ^CallSideEffect : ~m?
# 2397| v2397_11(void) = ^IndirectReadSideEffect[-1] : &:r2397_2, ~m?
# 2397| mu2397_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2397_2
# 2397| mu2397_13(char) = Store[x] : &:r2397_1, r2397_9
# 2397| r2397_14(glval<char>) = VariableAddress[x] :
# 2397| r2397_15(char) = Load[x] : &:r2397_14, ~m?
# 2397| r2397_16(char) = Constant[0] :
# 2397| r2397_17(bool) = CompareNE : r2397_15, r2397_16
# 2397| r2397_18(bool) = CopyValue : r2397_17
# 2397| v2397_19(void) = ConditionalBranch : r2397_18
#-----| False -> Block 2
#-----| True -> Block 1
# 2398| Block 1
# 2398| r2398_1(glval<char>) = VariableAddress[x] :
# 2398| r2398_2(char) = Load[x] : &:r2398_1, ~m?
# 2398| r2398_3(char) = Constant[1] :
# 2398| r2398_4(char) = Add : r2398_2, r2398_3
# 2398| mu2398_5(char) = Store[x] : &:r2398_1, r2398_4
#-----| Goto -> Block 2
# 2400| Block 2
# 2400| r2400_1(glval<char>) = VariableAddress[x] :
# 2400| r2400_2(glval<ClassWithDestructor>) = VariableAddress[#temp2400:18] :
# 2400| mu2400_3(ClassWithDestructor) = Uninitialized[#temp2400:18] : &:r2400_2
# 2400| r2400_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2400| v2400_5(void) = Call[ClassWithDestructor] : func:r2400_4, this:r2400_2
# 2400| mu2400_6(unknown) = ^CallSideEffect : ~m?
# 2400| mu2400_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2
# 2400| r2400_8(glval<unknown>) = FunctionAddress[get_x] :
# 2400| r2400_9(char) = Call[get_x] : func:r2400_8, this:r2400_2
# 2400| mu2400_10(unknown) = ^CallSideEffect : ~m?
# 2400| v2400_11(void) = ^IndirectReadSideEffect[-1] : &:r2400_2, ~m?
# 2400| mu2400_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2400_2
# 2400| mu2400_13(char) = Store[x] : &:r2400_1, r2400_9
# 2400| r2400_14(glval<char>) = VariableAddress[x] :
# 2400| r2400_15(char) = Load[x] : &:r2400_14, ~m?
# 2400| r2400_16(char) = Constant[0] :
# 2400| r2400_17(bool) = CompareNE : r2400_15, r2400_16
# 2400| v2400_18(void) = ConditionalBranch : r2400_17
#-----| False -> Block 4
#-----| True -> Block 3
# 2401| Block 3
# 2401| r2401_1(glval<char>) = VariableAddress[x] :
# 2401| r2401_2(char) = Load[x] : &:r2401_1, ~m?
# 2401| r2401_3(char) = Constant[1] :
# 2401| r2401_4(char) = Add : r2401_2, r2401_3
# 2401| mu2401_5(char) = Store[x] : &:r2401_1, r2401_4
#-----| Goto -> Block 4
# 2403| Block 4
# 2403| r2403_1(glval<char>) = VariableAddress[x] :
# 2403| r2403_2(glval<ClassWithDestructor>) = VariableAddress[#temp2403:28] :
# 2403| mu2403_3(ClassWithDestructor) = Uninitialized[#temp2403:28] : &:r2403_2
# 2403| r2403_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2403| v2403_5(void) = Call[ClassWithDestructor] : func:r2403_4, this:r2403_2
# 2403| mu2403_6(unknown) = ^CallSideEffect : ~m?
# 2403| mu2403_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2
# 2403| r2403_8(glval<unknown>) = FunctionAddress[get_x] :
# 2403| r2403_9(char) = Call[get_x] : func:r2403_8, this:r2403_2
# 2403| mu2403_10(unknown) = ^CallSideEffect : ~m?
# 2403| v2403_11(void) = ^IndirectReadSideEffect[-1] : &:r2403_2, ~m?
# 2403| mu2403_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2403_2
# 2403| mu2403_13(char) = Store[x] : &:r2403_1, r2403_9
# 2403| r2403_14(bool) = Constant[1] :
# 2403| v2403_15(void) = ConditionalBranch : r2403_14
#-----| False -> Block 6
#-----| True -> Block 5
# 2404| Block 5
# 2404| r2404_1(glval<char>) = VariableAddress[x] :
# 2404| r2404_2(char) = Load[x] : &:r2404_1, ~m?
# 2404| r2404_3(char) = Constant[1] :
# 2404| r2404_4(char) = Add : r2404_2, r2404_3
# 2404| mu2404_5(char) = Store[x] : &:r2404_1, r2404_4
#-----| Goto -> Block 6
# 2406| Block 6
# 2406| r2406_1(glval<char>) = VariableAddress[x] :
# 2406| r2406_2(glval<ClassWithDestructor>) = VariableAddress[#temp2406:21] :
# 2406| mu2406_3(ClassWithDestructor) = Uninitialized[#temp2406:21] : &:r2406_2
# 2406| r2406_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2406| v2406_5(void) = Call[ClassWithDestructor] : func:r2406_4, this:r2406_2
# 2406| mu2406_6(unknown) = ^CallSideEffect : ~m?
# 2406| mu2406_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2
# 2406| r2406_8(glval<unknown>) = FunctionAddress[get_x] :
# 2406| r2406_9(char) = Call[get_x] : func:r2406_8, this:r2406_2
# 2406| mu2406_10(unknown) = ^CallSideEffect : ~m?
# 2406| v2406_11(void) = ^IndirectReadSideEffect[-1] : &:r2406_2, ~m?
# 2406| mu2406_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2406_2
# 2406| mu2406_13(char) = Store[x] : &:r2406_1, r2406_9
# 2406| r2406_14(glval<char>) = VariableAddress[x] :
# 2406| r2406_15(char) = Load[x] : &:r2406_14, ~m?
# 2406| r2406_16(int) = Convert : r2406_15
# 2406| r2406_17(int) = CopyValue : r2406_16
# 2406| v2406_18(void) = Switch : r2406_17
#-----| Case[97] -> Block 7
#-----| Default -> Block 8
# 2407| Block 7
# 2407| v2407_1(void) = NoOp :
# 2408| r2408_1(glval<char>) = VariableAddress[x] :
# 2408| r2408_2(char) = Load[x] : &:r2408_1, ~m?
# 2408| r2408_3(char) = Constant[1] :
# 2408| r2408_4(char) = Add : r2408_2, r2408_3
# 2408| mu2408_5(char) = Store[x] : &:r2408_1, r2408_4
#-----| Goto -> Block 8
# 2411| Block 8
# 2411| r2411_1(glval<char>) = VariableAddress[x] :
# 2411| r2411_2(glval<ClassWithDestructor>) = VariableAddress[#temp2411:21] :
# 2411| mu2411_3(ClassWithDestructor) = Uninitialized[#temp2411:21] : &:r2411_2
# 2411| r2411_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2411| v2411_5(void) = Call[ClassWithDestructor] : func:r2411_4, this:r2411_2
# 2411| mu2411_6(unknown) = ^CallSideEffect : ~m?
# 2411| mu2411_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2
# 2411| r2411_8(glval<unknown>) = FunctionAddress[get_x] :
# 2411| r2411_9(char) = Call[get_x] : func:r2411_8, this:r2411_2
# 2411| mu2411_10(unknown) = ^CallSideEffect : ~m?
# 2411| v2411_11(void) = ^IndirectReadSideEffect[-1] : &:r2411_2, ~m?
# 2411| mu2411_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2411_2
# 2411| mu2411_13(char) = Store[x] : &:r2411_1, r2411_9
# 2411| r2411_14(glval<char>) = VariableAddress[x] :
# 2411| r2411_15(char) = Load[x] : &:r2411_14, ~m?
# 2411| r2411_16(int) = Convert : r2411_15
# 2411| v2411_17(void) = Switch : r2411_16
#-----| Case[97] -> Block 9
#-----| Default -> Block 10
# 2412| Block 9
# 2412| v2412_1(void) = NoOp :
# 2413| r2413_1(glval<char>) = VariableAddress[x] :
# 2413| r2413_2(char) = Load[x] : &:r2413_1, ~m?
# 2413| r2413_3(char) = Constant[1] :
# 2413| r2413_4(char) = Add : r2413_2, r2413_3
# 2413| mu2413_5(char) = Store[x] : &:r2413_1, r2413_4
#-----| Goto -> Block 10
# 2416| Block 10
# 2416| r2416_1(glval<char>) = VariableAddress[x] :
# 2416| r2416_2(glval<ClassWithDestructor>) = VariableAddress[#temp2416:18] :
# 2416| mu2416_3(ClassWithDestructor) = Uninitialized[#temp2416:18] : &:r2416_2
# 2416| r2416_4(glval<unknown>) = FunctionAddress[ClassWithDestructor] :
# 2416| v2416_5(void) = Call[ClassWithDestructor] : func:r2416_4, this:r2416_2
# 2416| mu2416_6(unknown) = ^CallSideEffect : ~m?
# 2416| mu2416_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2
# 2416| r2416_8(glval<unknown>) = FunctionAddress[get_x] :
# 2416| r2416_9(char) = Call[get_x] : func:r2416_8, this:r2416_2
# 2416| mu2416_10(unknown) = ^CallSideEffect : ~m?
# 2416| v2416_11(void) = ^IndirectReadSideEffect[-1] : &:r2416_2, ~m?
# 2416| mu2416_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2416_2
# 2416| mu2416_13(char) = Store[x] : &:r2416_1, r2416_9
# 2416| r2416_14(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_15(glval<vector<char>>) = VariableAddress[#temp2416:58] :
# 2416| mu2416_16(vector<char>) = Uninitialized[#temp2416:58] : &:r2416_15
# 2416| r2416_17(glval<unknown>) = FunctionAddress[vector] :
# 2416| r2416_18(glval<char>) = VariableAddress[x] :
# 2416| r2416_19(char) = Load[x] : &:r2416_18, ~m?
# 2416| v2416_20(void) = Call[vector] : func:r2416_17, this:r2416_15, 0:r2416_19
# 2416| mu2416_21(unknown) = ^CallSideEffect : ~m?
# 2416| mu2416_22(vector<char>) = ^IndirectMayWriteSideEffect[-1] : &:r2416_15
# 2416| r2416_23(vector<char> &) = CopyValue : r2416_15
# 2416| mu2416_24(vector<char> &&) = Store[(__range)] : &:r2416_14, r2416_23
# 2416| r2416_25(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
# 2416| r2416_26(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_27(vector<char> &&) = Load[(__range)] : &:r2416_26, ~m?
#-----| r0_1(glval<vector<char>>) = CopyValue : r2416_27
#-----| r0_2(glval<vector<char>>) = Convert : r0_1
# 2416| r2416_28(glval<unknown>) = FunctionAddress[begin] :
# 2416| r2416_29(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Call[begin] : func:r2416_28, this:r0_2
#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m?
# 2416| mu2416_30(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Store[(__begin)] : &:r2416_25, r2416_29
# 2416| r2416_31(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__end)] :
# 2416| r2416_32(glval<vector<char> &&>) = VariableAddress[(__range)] :
# 2416| r2416_33(vector<char> &&) = Load[(__range)] : &:r2416_32, ~m?
#-----| r0_4(glval<vector<char>>) = CopyValue : r2416_33
#-----| r0_5(glval<vector<char>>) = Convert : r0_4
# 2416| r2416_34(glval<unknown>) = FunctionAddress[end] :
# 2416| r2416_35(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Call[end] : func:r2416_34, this:r0_5
#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m?
# 2416| mu2416_36(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Store[(__end)] : &:r2416_31, r2416_35
#-----| Goto -> Block 11
# 2416| Block 11
# 2416| r2416_37(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
#-----| r0_7(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_37
# 2416| r2416_38(glval<unknown>) = FunctionAddress[operator!=] :
#-----| r0_8(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[#temp0:0] :
#-----| mu0_9(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Uninitialized[#temp0:0] : &:r0_8
# 2416| r2416_39(glval<unknown>) = FunctionAddress[iterator] :
# 2416| r2416_40(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__end)] :
#-----| r0_10(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_40
#-----| r0_11(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = CopyValue : r0_10
# 2416| v2416_41(void) = Call[iterator] : func:r2416_39, this:r0_8, 0:r0_11
# 2416| mu2416_42(unknown) = ^CallSideEffect : ~m?
#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m?
# 2416| mu2416_43(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8
#-----| r0_13(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = Load[#temp0:0] : &:r0_8, ~m?
# 2416| r2416_44(bool) = Call[operator!=] : func:r2416_38, this:r0_7, 0:r0_13
# 2416| mu2416_45(unknown) = ^CallSideEffect : ~m?
#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m?
# 2416| v2416_46(void) = ConditionalBranch : r2416_44
#-----| False -> Block 13
#-----| True -> Block 12
# 2416| Block 12
# 2416| r2416_47(glval<char>) = VariableAddress[y] :
# 2416| r2416_48(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
#-----| r0_15(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = Convert : r2416_48
# 2416| r2416_49(glval<unknown>) = FunctionAddress[operator*] :
# 2416| r2416_50(char &) = Call[operator*] : func:r2416_49, this:r0_15
# 2416| mu2416_51(unknown) = ^CallSideEffect : ~m?
#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m?
# 2416| r2416_52(char) = Load[?] : &:r2416_50, ~m?
# 2416| mu2416_53(char) = Store[y] : &:r2416_47, r2416_52
# 2417| r2417_1(glval<char>) = VariableAddress[x] :
# 2417| r2417_2(char) = Load[x] : &:r2417_1, ~m?
# 2417| r2417_3(int) = Convert : r2417_2
# 2417| r2417_4(glval<char>) = VariableAddress[y] :
# 2417| r2417_5(char) = Load[y] : &:r2417_4, ~m?
# 2417| r2417_6(int) = Convert : r2417_5
# 2417| r2417_7(int) = Add : r2417_6, r2417_3
# 2417| r2417_8(char) = Convert : r2417_7
# 2417| mu2417_9(char) = Store[y] : &:r2417_4, r2417_8
# 2416| r2416_54(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = VariableAddress[(__begin)] :
# 2416| r2416_55(glval<unknown>) = FunctionAddress[operator++] :
# 2416| r2416_56(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &> &) = Call[operator++] : func:r2416_55, this:r2416_54
# 2416| mu2416_57(unknown) = ^CallSideEffect : ~m?
# 2416| v2416_58(void) = ^IndirectReadSideEffect[-1] : &:r2416_54, ~m?
# 2416| mu2416_59(iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>) = ^IndirectMayWriteSideEffect[-1] : &:r2416_54
# 2416| r2416_60(glval<iterator<random_access_iterator_tag, char, ptrdiff_t, char *, char &>>) = CopyValue : r2416_56
#-----| Goto (back edge) -> Block 11
# 2418| Block 13
# 2418| v2418_1(void) = NoOp :
# 2396| v2396_4(void) = ReturnVoid :
# 2396| v2396_5(void) = AliasedUse : ~m?
# 2396| v2396_6(void) = ExitFunction :
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0