diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 99d1d6b4ee6f..af029bf37482 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -13365,6 +13365,200 @@ ir.cpp: # 1717| : # 1717| getEntryPoint(): [BlockStmt] { ... } # 1717| getStmt(0): [ReturnStmt] return ... +# 1721| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) +# 1721| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1724| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1724| : +# 1724| : +# 1724| getEntryPoint(): [BlockStmt] { ... } +# 1724| getStmt(0): [ReturnStmt] return ... +# 1725| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1725| : +# 1725| getParameter(0): [Parameter] c +# 1725| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1725| : +# 1725| getEntryPoint(): [BlockStmt] { ... } +# 1726| getStmt(0): [ExprStmt] ExprStmt +# 1726| getExpr(): [AssignExpr] ... = ... +# 1726| Type = [IntType] int +# 1726| ValueCategory = lvalue +# 1726| getLValue(): [PointerFieldAccess] x +# 1726| Type = [IntType] int +# 1726| ValueCategory = lvalue +# 1726| getQualifier(): [ThisExpr] this +# 1726| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * +# 1726| ValueCategory = prvalue(load) +# 1726| getRValue(): [ReferenceFieldAccess] x +# 1726| Type = [IntType] int +# 1726| ValueCategory = prvalue(load) +# 1726| getQualifier(): [VariableAccess] c +# 1726| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1726| ValueCategory = prvalue(load) +# 1726| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1726| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1726| ValueCategory = lvalue +# 1727| getStmt(1): [ReturnStmt] return ... +# 1730| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) +# 1730| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & +# 1730| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) +# 1730| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && +# 1730| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) +# 1730| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & +# 1730| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) +# 1730| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && +# 1733| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1733| : +# 1733| : +# 1733| getEntryPoint(): [BlockStmt] { ... } +# 1733| getStmt(0): [ReturnStmt] return ... +# 1736| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) +# 1736| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1736| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) +# 1736| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && +# 1736| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1736| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1736| : +# 1736| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1736| Type = [VoidType] void +# 1736| ValueCategory = prvalue +# 1736| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1736| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1736| ValueCategory = prvalue(load) +# 1736| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1736| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1736| ValueCategory = prvalue +# 1736| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1736| Conversion = [BaseClassConversion] base class conversion +# 1736| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1736| ValueCategory = lvalue +# 1736| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1736| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1736| ValueCategory = lvalue +# 1736| getInitializer(1): (no string representation) +# 1736| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1736| ValueCategory = prvalue +# 1736| getEntryPoint(): [BlockStmt] { ... } +# 1736| getStmt(0): [ReturnStmt] return ... +# 1736| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) +# 1736| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && +# 1740| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1740| : +# 1740| : +# 1740| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1740| Type = [VoidType] void +# 1740| ValueCategory = prvalue +# 1740| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass +# 1740| Type = [VoidType] void +# 1740| ValueCategory = prvalue +# 1740| getEntryPoint(): [BlockStmt] { ... } +# 1740| getStmt(0): [ReturnStmt] return ... +# 1743| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) +# 1743| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1743| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) +# 1743| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && +# 1743| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1743| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1743| : +# 1743| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1743| Type = [VoidType] void +# 1743| ValueCategory = prvalue +# 1743| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1743| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1743| ValueCategory = prvalue(load) +# 1743| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1743| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1743| ValueCategory = prvalue +# 1743| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1743| Conversion = [BaseClassConversion] base class conversion +# 1743| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1743| ValueCategory = lvalue +# 1743| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1743| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1743| ValueCategory = lvalue +# 1743| getInitializer(1): (no string representation) +# 1743| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1743| ValueCategory = prvalue +# 1743| getEntryPoint(): [BlockStmt] { ... } +# 1743| getStmt(0): [ReturnStmt] return ... +# 1743| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) +# 1743| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && +# 1747| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1747| : +# 1747| : +# 1747| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1747| Type = [VoidType] void +# 1747| ValueCategory = prvalue +# 1747| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass +# 1747| Type = [VoidType] void +# 1747| ValueCategory = prvalue +# 1747| getEntryPoint(): [BlockStmt] { ... } +# 1747| getStmt(0): [ReturnStmt] return ... +# 1750| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1750| : +# 1751| getParameter(0): [Parameter] x +# 1751| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1752| getParameter(1): [Parameter] y +# 1752| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1752| getEntryPoint(): [BlockStmt] { ... } +# 1753| getStmt(0): [DeclStmt] declaration +# 1753| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx +# 1753| Type = [Class] CopyConstructorTestNonVirtualClass +# 1753| getVariable().getInitializer(): [Initializer] initializer for cx +# 1753| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass +# 1753| Type = [VoidType] void +# 1753| ValueCategory = prvalue +# 1753| getArgument(0): [VariableAccess] x +# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1753| ValueCategory = prvalue(load) +# 1753| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1753| ValueCategory = prvalue +# 1753| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1753| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1753| ValueCategory = lvalue +# 1754| getStmt(1): [DeclStmt] declaration +# 1754| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy +# 1754| Type = [Class] CopyConstructorTestVirtualClass +# 1754| getVariable().getInitializer(): [Initializer] initializer for cy +# 1754| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass +# 1754| Type = [VoidType] void +# 1754| ValueCategory = prvalue +# 1754| getArgument(0): [VariableAccess] y +# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1754| ValueCategory = prvalue(load) +# 1754| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1754| ValueCategory = prvalue +# 1754| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1754| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1754| ValueCategory = lvalue +# 1755| getStmt(2): [ReturnStmt] return ... perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 80f48d1a6e23..4e3006c89013 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1718,4 +1718,40 @@ void captured_lambda2(TrivialLambdaClass p1, TrivialLambdaClass &p2, TrivialLamb }; } +class CopyConstructorWithImplicitArgumentClass { + int x; +public: + CopyConstructorWithImplicitArgumentClass() {} + CopyConstructorWithImplicitArgumentClass(const CopyConstructorWithImplicitArgumentClass &c) { + x = c.x; + } +}; + +class CopyConstructorWithBitwiseCopyClass { + int y; +public: + CopyConstructorWithBitwiseCopyClass() {} +}; + +class CopyConstructorTestNonVirtualClass : + public CopyConstructorWithImplicitArgumentClass, + public CopyConstructorWithBitwiseCopyClass { +public: + CopyConstructorTestNonVirtualClass() {} +}; + +class CopyConstructorTestVirtualClass : + public virtual CopyConstructorWithImplicitArgumentClass, + public virtual CopyConstructorWithBitwiseCopyClass { +public: + CopyConstructorTestVirtualClass() {} +}; + +int implicit_copy_constructor_test( + const CopyConstructorTestNonVirtualClass &x, + const CopyConstructorTestVirtualClass &y) { + CopyConstructorTestNonVirtualClass cx = x; + CopyConstructorTestVirtualClass cy = y; +} + // semmle-extractor-options: -std=c++17 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index e9deaf0b49f0..e893134031f3 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -670,6 +670,10 @@ | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -686,6 +690,10 @@ | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | @@ -746,6 +754,8 @@ | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | +| file://:0:0:0:0 | Load | m0_2 | +| file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m745_6 | | file://:0:0:0:0 | Load | m754_6 | | file://:0:0:0:0 | Load | m763_6 | @@ -767,6 +777,8 @@ | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | +| file://:0:0:0:0 | SideEffect | m0_4 | +| file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m1078_23 | | file://:0:0:0:0 | SideEffect | m1078_23 | | file://:0:0:0:0 | SideEffect | m1084_23 | @@ -8009,6 +8021,200 @@ | ir.cpp:1717:30:1717:30 | Load | m1717_6 | | ir.cpp:1717:30:1717:30 | SideEffect | m1717_3 | | ir.cpp:1717:30:1717:30 | SideEffect | m1717_8 | +| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | +| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | +| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | +| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | +| ir.cpp:1724:5:1724:44 | ChiPartial | partial:m1724_3 | +| ir.cpp:1724:5:1724:44 | ChiTotal | total:m1724_2 | +| ir.cpp:1724:5:1724:44 | Load | m1724_6 | +| ir.cpp:1724:5:1724:44 | SideEffect | m1724_3 | +| ir.cpp:1724:5:1724:44 | SideEffect | m1724_8 | +| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | +| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | +| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | +| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | +| ir.cpp:1725:5:1725:44 | ChiPartial | partial:m1725_3 | +| ir.cpp:1725:5:1725:44 | ChiTotal | total:m1725_2 | +| ir.cpp:1725:5:1725:44 | Load | m1725_6 | +| ir.cpp:1725:5:1725:44 | SideEffect | m1725_3 | +| ir.cpp:1725:5:1725:44 | SideEffect | m1726_10 | +| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | +| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | +| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | +| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | +| ir.cpp:1725:94:1725:94 | Load | m1725_10 | +| ir.cpp:1725:94:1725:94 | SideEffect | m1725_12 | +| ir.cpp:1726:9:1726:9 | Address | &:r1726_6 | +| ir.cpp:1726:9:1726:9 | Address | &:r1726_8 | +| ir.cpp:1726:9:1726:9 | Load | m1725_6 | +| ir.cpp:1726:9:1726:9 | Unary | r1726_7 | +| ir.cpp:1726:9:1726:15 | ChiPartial | partial:m1726_9 | +| ir.cpp:1726:9:1726:15 | ChiTotal | total:m1725_8 | +| ir.cpp:1726:13:1726:13 | Address | &:r1726_1 | +| ir.cpp:1726:13:1726:13 | Load | m1725_10 | +| ir.cpp:1726:13:1726:13 | Unary | r1726_2 | +| ir.cpp:1726:13:1726:13 | Unary | r1726_3 | +| ir.cpp:1726:15:1726:15 | Address | &:r1726_4 | +| ir.cpp:1726:15:1726:15 | Load | ~m1725_12 | +| ir.cpp:1726:15:1726:15 | StoreValue | r1726_5 | +| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | +| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | +| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | +| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | +| ir.cpp:1733:5:1733:39 | ChiPartial | partial:m1733_3 | +| ir.cpp:1733:5:1733:39 | ChiTotal | total:m1733_2 | +| ir.cpp:1733:5:1733:39 | Load | m1733_6 | +| ir.cpp:1733:5:1733:39 | SideEffect | m1733_3 | +| ir.cpp:1733:5:1733:39 | SideEffect | m1733_8 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_9 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_11 | +| ir.cpp:1736:7:1736:7 | Address | &:r1736_15 | +| ir.cpp:1736:7:1736:7 | Arg(0) | 0:r1736_15 | +| ir.cpp:1736:7:1736:7 | Arg(this) | this:r1736_9 | +| ir.cpp:1736:7:1736:7 | CallTarget | func:r1736_10 | +| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_3 | +| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_17 | +| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_20 | +| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_2 | +| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_4 | +| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_8 | +| ir.cpp:1736:7:1736:7 | Load | m0_2 | +| ir.cpp:1736:7:1736:7 | Load | m1736_6 | +| ir.cpp:1736:7:1736:7 | SideEffect | m1736_21 | +| ir.cpp:1736:7:1736:7 | SideEffect | ~m0_4 | +| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_4 | +| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_18 | +| ir.cpp:1736:7:1736:7 | Unary | m1736_6 | +| ir.cpp:1736:7:1736:7 | Unary | r1736_12 | +| ir.cpp:1736:7:1736:7 | Unary | r1736_13 | +| ir.cpp:1736:7:1736:7 | Unary | r1736_14 | +| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | +| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | +| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | +| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | +| ir.cpp:1740:5:1740:38 | ChiPartial | partial:m1740_3 | +| ir.cpp:1740:5:1740:38 | ChiTotal | total:m1740_2 | +| ir.cpp:1740:5:1740:38 | Load | m1740_6 | +| ir.cpp:1740:5:1740:38 | SideEffect | m1740_22 | +| ir.cpp:1740:5:1740:38 | SideEffect | ~m1740_20 | +| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | +| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | +| ir.cpp:1740:42:1740:42 | Address | &:r1740_9 | +| ir.cpp:1740:42:1740:42 | Address | &:r1740_16 | +| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_9 | +| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_16 | +| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_10 | +| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_17 | +| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_12 | +| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_14 | +| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_19 | +| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_21 | +| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_4 | +| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_8 | +| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_13 | +| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_15 | +| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_4 | +| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_13 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_9 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_11 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_15 | +| ir.cpp:1743:7:1743:7 | Arg(0) | 0:r1743_15 | +| ir.cpp:1743:7:1743:7 | Arg(this) | this:r1743_9 | +| ir.cpp:1743:7:1743:7 | CallTarget | func:r1743_10 | +| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_3 | +| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_17 | +| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_20 | +| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_2 | +| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_4 | +| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_18 | +| ir.cpp:1743:7:1743:7 | Load | m0_2 | +| ir.cpp:1743:7:1743:7 | Load | m1743_6 | +| ir.cpp:1743:7:1743:7 | SideEffect | m1743_8 | +| ir.cpp:1743:7:1743:7 | SideEffect | ~m0_4 | +| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_4 | +| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_21 | +| ir.cpp:1743:7:1743:7 | Unary | m1743_6 | +| ir.cpp:1743:7:1743:7 | Unary | r1743_12 | +| ir.cpp:1743:7:1743:7 | Unary | r1743_13 | +| ir.cpp:1743:7:1743:7 | Unary | r1743_14 | +| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | +| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | +| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | +| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | +| ir.cpp:1747:5:1747:35 | ChiPartial | partial:m1747_3 | +| ir.cpp:1747:5:1747:35 | ChiTotal | total:m1747_2 | +| ir.cpp:1747:5:1747:35 | Load | m1747_6 | +| ir.cpp:1747:5:1747:35 | SideEffect | m1747_8 | +| ir.cpp:1747:5:1747:35 | SideEffect | ~m1747_22 | +| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | +| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | +| ir.cpp:1747:39:1747:39 | Address | &:r1747_9 | +| ir.cpp:1747:39:1747:39 | Address | &:r1747_16 | +| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_9 | +| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_16 | +| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_10 | +| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_17 | +| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_12 | +| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_14 | +| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_19 | +| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_21 | +| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_4 | +| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_13 | +| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_15 | +| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_20 | +| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_4 | +| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_15 | +| ir.cpp:1750:5:1750:34 | ChiPartial | partial:m1750_3 | +| ir.cpp:1750:5:1750:34 | ChiTotal | total:m1750_2 | +| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | +| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | +| ir.cpp:1751:51:1751:51 | Address | &:r1751_3 | +| ir.cpp:1751:51:1751:51 | Load | m1751_2 | +| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | +| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | +| ir.cpp:1752:48:1752:48 | Address | &:r1752_3 | +| ir.cpp:1752:48:1752:48 | Load | m1752_2 | +| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | +| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | +| ir.cpp:1753:40:1753:41 | Arg(this) | this:r1753_1 | +| ir.cpp:1753:44:1753:45 | CallTarget | func:r1753_3 | +| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_9 | +| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_12 | +| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1750_4 | +| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1753_2 | +| ir.cpp:1753:44:1753:45 | SideEffect | ~m1750_4 | +| ir.cpp:1753:45:1753:45 | Address | &:r1753_4 | +| ir.cpp:1753:45:1753:45 | Address | &:r1753_7 | +| ir.cpp:1753:45:1753:45 | Arg(0) | 0:r1753_7 | +| ir.cpp:1753:45:1753:45 | Load | m1751_2 | +| ir.cpp:1753:45:1753:45 | SideEffect | ~m1751_4 | +| ir.cpp:1753:45:1753:45 | Unary | r1753_5 | +| ir.cpp:1753:45:1753:45 | Unary | r1753_6 | +| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | +| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | +| ir.cpp:1754:37:1754:38 | Arg(this) | this:r1754_1 | +| ir.cpp:1754:41:1754:42 | CallTarget | func:r1754_3 | +| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_9 | +| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_12 | +| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1753_10 | +| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1754_2 | +| ir.cpp:1754:41:1754:42 | SideEffect | ~m1753_10 | +| ir.cpp:1754:42:1754:42 | Address | &:r1754_4 | +| ir.cpp:1754:42:1754:42 | Address | &:r1754_7 | +| ir.cpp:1754:42:1754:42 | Arg(0) | 0:r1754_7 | +| ir.cpp:1754:42:1754:42 | Load | m1752_2 | +| ir.cpp:1754:42:1754:42 | SideEffect | ~m1752_4 | +| ir.cpp:1754:42:1754:42 | Unary | r1754_5 | +| ir.cpp:1754:42:1754:42 | Unary | r1754_6 | | 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 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index 826c3beedf16..9575759051ee 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -18,6 +18,8 @@ lostReachability backEdgeCountMismatch useNotDominatedByDefinition | ir.cpp:1486:8:1486:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1486:8:1486:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | +| ir.cpp:1751:51:1751:51 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1750:5:1750:34 | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | +| ir.cpp:1752:48:1752:48 | Address | Operand 'Address' is not dominated by its definition in function '$@'. | ir.cpp:1750:5:1750:34 | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) | switchInstructionWithoutDefaultEdge notMarkedAsConflated wronglyMarkedAsConflated diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index d0ecc9ace669..3f49642c4fb9 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -9202,6 +9202,222 @@ ir.cpp: # 1717| v1717_11(void) = AliasedUse : ~m? # 1717| v1717_12(void) = ExitFunction : +# 1724| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1724| Block 0 +# 1724| v1724_1(void) = EnterFunction : +# 1724| mu1724_2(unknown) = AliasedDefinition : +# 1724| mu1724_3(unknown) = InitializeNonLocal : +# 1724| r1724_4(glval) = VariableAddress[#this] : +# 1724| mu1724_5(glval) = InitializeParameter[#this] : &:r1724_4 +# 1724| r1724_6(glval) = Load[#this] : &:r1724_4, ~m? +# 1724| mu1724_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1724_6 +# 1724| v1724_8(void) = NoOp : +# 1724| v1724_9(void) = ReturnIndirection[#this] : &:r1724_6, ~m? +# 1724| v1724_10(void) = ReturnVoid : +# 1724| v1724_11(void) = AliasedUse : ~m? +# 1724| v1724_12(void) = ExitFunction : + +# 1725| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1725| Block 0 +# 1725| v1725_1(void) = EnterFunction : +# 1725| mu1725_2(unknown) = AliasedDefinition : +# 1725| mu1725_3(unknown) = InitializeNonLocal : +# 1725| r1725_4(glval) = VariableAddress[#this] : +# 1725| mu1725_5(glval) = InitializeParameter[#this] : &:r1725_4 +# 1725| r1725_6(glval) = Load[#this] : &:r1725_4, ~m? +# 1725| mu1725_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1725_6 +# 1725| r1725_8(glval) = VariableAddress[c] : +# 1725| mu1725_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1725_8 +# 1725| r1725_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1725_8, ~m? +# 1725| mu1725_11(unknown) = InitializeIndirection[c] : &:r1725_10 +# 1726| r1726_1(glval) = VariableAddress[c] : +# 1726| r1726_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1726_1, ~m? +# 1726| r1726_3(glval) = CopyValue : r1726_2 +# 1726| r1726_4(glval) = FieldAddress[x] : r1726_3 +# 1726| r1726_5(int) = Load[?] : &:r1726_4, ~m? +# 1726| r1726_6(glval) = VariableAddress[#this] : +# 1726| r1726_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1726_6, ~m? +# 1726| r1726_8(glval) = FieldAddress[x] : r1726_7 +# 1726| mu1726_9(int) = Store[?] : &:r1726_8, r1726_5 +# 1727| v1727_1(void) = NoOp : +# 1725| v1725_12(void) = ReturnIndirection[#this] : &:r1725_6, ~m? +# 1725| v1725_13(void) = ReturnIndirection[c] : &:r1725_10, ~m? +# 1725| v1725_14(void) = ReturnVoid : +# 1725| v1725_15(void) = AliasedUse : ~m? +# 1725| v1725_16(void) = ExitFunction : + +# 1733| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1733| Block 0 +# 1733| v1733_1(void) = EnterFunction : +# 1733| mu1733_2(unknown) = AliasedDefinition : +# 1733| mu1733_3(unknown) = InitializeNonLocal : +# 1733| r1733_4(glval) = VariableAddress[#this] : +# 1733| mu1733_5(glval) = InitializeParameter[#this] : &:r1733_4 +# 1733| r1733_6(glval) = Load[#this] : &:r1733_4, ~m? +# 1733| mu1733_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1733_6 +# 1733| v1733_8(void) = NoOp : +# 1733| v1733_9(void) = ReturnIndirection[#this] : &:r1733_6, ~m? +# 1733| v1733_10(void) = ReturnVoid : +# 1733| v1733_11(void) = AliasedUse : ~m? +# 1733| v1733_12(void) = ExitFunction : + +# 1736| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1736| Block 0 +# 1736| v1736_1(void) = EnterFunction : +# 1736| mu1736_2(unknown) = AliasedDefinition : +# 1736| mu1736_3(unknown) = InitializeNonLocal : +# 1736| r1736_4(glval) = VariableAddress[#this] : +# 1736| mu1736_5(glval) = InitializeParameter[#this] : &:r1736_4 +# 1736| r1736_6(glval) = Load[#this] : &:r1736_4, ~m? +# 1736| mu1736_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1736_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| mu0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1736| r1736_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1736_5 +# 1736| r1736_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1736| r1736_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1736| r1736_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1736_10, ~m? +# 1736| r1736_12(glval) = CopyValue : r1736_11 +# 1736| r1736_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1736_12 +# 1736| r1736_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1736_13 +# 1736| v1736_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1736_9, this:r1736_8, 0:r1736_14 +# 1736| mu1736_16(unknown) = ^CallSideEffect : ~m? +# 1736| v1736_17(void) = ^BufferReadSideEffect[0] : &:r1736_14, ~m? +# 1736| mu1736_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1736_8 +# 1736| v1736_19(void) = NoOp : +# 1736| v1736_20(void) = ReturnIndirection[#this] : &:r1736_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1736| v1736_21(void) = ReturnVoid : +# 1736| v1736_22(void) = AliasedUse : ~m? +# 1736| v1736_23(void) = ExitFunction : + +# 1740| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1740| Block 0 +# 1740| v1740_1(void) = EnterFunction : +# 1740| mu1740_2(unknown) = AliasedDefinition : +# 1740| mu1740_3(unknown) = InitializeNonLocal : +# 1740| r1740_4(glval) = VariableAddress[#this] : +# 1740| mu1740_5(glval) = InitializeParameter[#this] : &:r1740_4 +# 1740| r1740_6(glval) = Load[#this] : &:r1740_4, ~m? +# 1740| mu1740_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1740_6 +# 1740| r1740_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1740_5 +# 1740| r1740_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1740| v1740_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1740_9, this:r1740_8 +# 1740| mu1740_11(unknown) = ^CallSideEffect : ~m? +# 1740| mu1740_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_8 +# 1740| r1740_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1740_5 +# 1740| r1740_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1740| v1740_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1740_14, this:r1740_13 +# 1740| mu1740_16(unknown) = ^CallSideEffect : ~m? +# 1740| mu1740_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_13 +# 1740| v1740_18(void) = NoOp : +# 1740| v1740_19(void) = ReturnIndirection[#this] : &:r1740_6, ~m? +# 1740| v1740_20(void) = ReturnVoid : +# 1740| v1740_21(void) = AliasedUse : ~m? +# 1740| v1740_22(void) = ExitFunction : + +# 1743| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1743| Block 0 +# 1743| v1743_1(void) = EnterFunction : +# 1743| mu1743_2(unknown) = AliasedDefinition : +# 1743| mu1743_3(unknown) = InitializeNonLocal : +# 1743| r1743_4(glval) = VariableAddress[#this] : +# 1743| mu1743_5(glval) = InitializeParameter[#this] : &:r1743_4 +# 1743| r1743_6(glval) = Load[#this] : &:r1743_4, ~m? +# 1743| mu1743_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1743_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| mu0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 1743| r1743_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1743_5 +# 1743| r1743_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1743| r1743_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1743| r1743_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1743_10, ~m? +# 1743| r1743_12(glval) = CopyValue : r1743_11 +# 1743| r1743_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1743_12 +# 1743| r1743_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1743_13 +# 1743| v1743_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1743_9, this:r1743_8, 0:r1743_14 +# 1743| mu1743_16(unknown) = ^CallSideEffect : ~m? +# 1743| v1743_17(void) = ^BufferReadSideEffect[0] : &:r1743_14, ~m? +# 1743| mu1743_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1743_8 +# 1743| v1743_19(void) = NoOp : +# 1743| v1743_20(void) = ReturnIndirection[#this] : &:r1743_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 1743| v1743_21(void) = ReturnVoid : +# 1743| v1743_22(void) = AliasedUse : ~m? +# 1743| v1743_23(void) = ExitFunction : + +# 1747| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1747| Block 0 +# 1747| v1747_1(void) = EnterFunction : +# 1747| mu1747_2(unknown) = AliasedDefinition : +# 1747| mu1747_3(unknown) = InitializeNonLocal : +# 1747| r1747_4(glval) = VariableAddress[#this] : +# 1747| mu1747_5(glval) = InitializeParameter[#this] : &:r1747_4 +# 1747| r1747_6(glval) = Load[#this] : &:r1747_4, ~m? +# 1747| mu1747_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1747_6 +# 1747| r1747_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1747_5 +# 1747| r1747_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1747| v1747_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1747_9, this:r1747_8 +# 1747| mu1747_11(unknown) = ^CallSideEffect : ~m? +# 1747| mu1747_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_8 +# 1747| r1747_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1747_5 +# 1747| r1747_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1747| v1747_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1747_14, this:r1747_13 +# 1747| mu1747_16(unknown) = ^CallSideEffect : ~m? +# 1747| mu1747_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_13 +# 1747| v1747_18(void) = NoOp : +# 1747| v1747_19(void) = ReturnIndirection[#this] : &:r1747_6, ~m? +# 1747| v1747_20(void) = ReturnVoid : +# 1747| v1747_21(void) = AliasedUse : ~m? +# 1747| v1747_22(void) = ExitFunction : + +# 1750| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1750| Block 0 +# 1750| v1750_1(void) = EnterFunction : +# 1750| mu1750_2(unknown) = AliasedDefinition : +# 1750| mu1750_3(unknown) = InitializeNonLocal : +# 1751| r1751_1(glval) = VariableAddress[x] : +# 1751| mu1751_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1751_1 +# 1751| r1751_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1751_1, ~m? +# 1751| mu1751_4(unknown) = InitializeIndirection[x] : &:r1751_3 +# 1752| r1752_1(glval) = VariableAddress[y] : +# 1752| mu1752_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1752_1 +# 1752| r1752_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1752_1, ~m? +# 1752| mu1752_4(unknown) = InitializeIndirection[y] : &:r1752_3 +# 1753| r1753_1(glval) = VariableAddress[cx] : +# 1753| mu1753_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1753_1 +# 1753| r1753_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1753| r1753_4(glval) = VariableAddress[x] : +# 1753| r1753_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_4, ~m? +# 1753| r1753_6(glval) = CopyValue : r1753_5 +# 1753| r1753_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1753_6 +# 1753| v1753_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1753_3, this:r1753_1, 0:r1753_7 +# 1753| mu1753_9(unknown) = ^CallSideEffect : ~m? +# 1753| v1753_10(void) = ^BufferReadSideEffect[0] : &:r1753_7, ~m? +# 1753| mu1753_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 +# 1754| r1754_1(glval) = VariableAddress[cy] : +# 1754| mu1754_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1754_1 +# 1754| r1754_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1754| r1754_4(glval) = VariableAddress[y] : +# 1754| r1754_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_4, ~m? +# 1754| r1754_6(glval) = CopyValue : r1754_5 +# 1754| r1754_7(CopyConstructorTestVirtualClass &) = CopyValue : r1754_6 +# 1754| v1754_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1754_3, this:r1754_1, 0:r1754_7 +# 1754| mu1754_9(unknown) = ^CallSideEffect : ~m? +# 1754| v1754_10(void) = ^BufferReadSideEffect[0] : &:r1754_7, ~m? +# 1754| mu1754_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 +# 1755| v1755_1(void) = Unreached : + +# 1751| Block 1 +# 1751| v1751_5(void) = ReturnIndirection[x] : &:r1751_3, ~m? +# 1752| v1752_5(void) = ReturnIndirection[y] : &:r1752_3, ~m? +# 1750| r1750_4(glval) = VariableAddress[#return] : +# 1750| v1750_5(void) = ReturnValue : &:r1750_4, ~m? +# 1750| v1750_6(void) = AliasedUse : ~m? +# 1750| v1750_7(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected index 5da25abb88a5..3cd449300e59 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected @@ -123,3 +123,4 @@ postWithInFlow | misc.c:220:4:220:5 | sp [inner post update] | PostUpdateNode should not be the target of local flow. | | static_init_templates.cpp:3:2:3:4 | ref [post update] | PostUpdateNode should not be the target of local flow. | | static_init_templates.cpp:21:2:21:4 | val [post update] | PostUpdateNode should not be the target of local flow. | +| try_catch.cpp:7:8:7:8 | call to exception | PostUpdateNode should not be the target of local flow. |