diff options
-rw-r--r-- | compilerplugins/clang/plugin.cxx | 20 | ||||
-rw-r--r-- | oox/source/drawingml/chart/titleconverter.cxx | 2 | ||||
-rw-r--r-- | oox/source/dump/dumperbase.cxx | 6 | ||||
-rw-r--r-- | oox/source/dump/oledumper.cxx | 4 |
4 files changed, 17 insertions, 15 deletions
diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx index 5248927e5d84..c9e0170f2969 100644 --- a/compilerplugins/clang/plugin.cxx +++ b/compilerplugins/clang/plugin.cxx @@ -830,19 +830,21 @@ bool hasExternalLinkage(VarDecl const * decl) { bool isSmartPointerType(const Expr* e) { - // First check the object type as written, in case the get member function is - // declared at a base class of std::unique_ptr or std::shared_ptr: - auto const t = e->IgnoreImpCasts()->getType(); - auto const tc1 = loplugin::TypeCheck(t); - if (tc1.ClassOrStruct("unique_ptr").StdNamespace() - || tc1.ClassOrStruct("shared_ptr").StdNamespace()) + // First check whether the object type as written is, or is derived from, std::unique_ptr or + // std::shared_ptr, in case the get member function is declared at a base class of that std + // type: + if (loplugin::isDerivedFrom( + e->IgnoreImpCasts()->getType()->getAsCXXRecordDecl(), + [](Decl const * decl) { + auto const dc = loplugin::DeclCheck(decl); + return dc.ClassOrStruct("unique_ptr").StdNamespace() + || dc.ClassOrStruct("shared_ptr").StdNamespace(); + })) return true; // Then check the object type coerced to the type of the get member function, in // case the type-as-written is derived from one of these types (tools::SvRef is - // final, but the rest are not; but note that this will fail when the type-as- - // written is derived from std::unique_ptr or std::shared_ptr for which the get - // member function is declared at a base class): + // final, but the rest are not): auto const tc2 = loplugin::TypeCheck(e->getType()); if (tc2.ClassOrStruct("unique_ptr").StdNamespace() || tc2.ClassOrStruct("shared_ptr").StdNamespace() diff --git a/oox/source/drawingml/chart/titleconverter.cxx b/oox/source/drawingml/chart/titleconverter.cxx index a4a2d9c1ec89..c4bf45dea739 100644 --- a/oox/source/drawingml/chart/titleconverter.cxx +++ b/oox/source/drawingml/chart/titleconverter.cxx @@ -238,7 +238,7 @@ void LegendConverter::convertFromModel( const Reference< XDiagram >& rxDiagram ) } bool bManualLayout=false; // manual positioning and size - if( mrModel.mxLayout.get() ) + if( mrModel.mxLayout ) { LayoutConverter aLayoutConv( *this, *mrModel.mxLayout ); // manual size needs ChartLegendExpansion_CUSTOM diff --git a/oox/source/dump/dumperbase.cxx b/oox/source/dump/dumperbase.cxx index 775790a20eed..8fcb7277b2e4 100644 --- a/oox/source/dump/dumperbase.cxx +++ b/oox/source/dump/dumperbase.cxx @@ -2015,7 +2015,7 @@ void InputObjectBase::construct( const InputObjectBase& rParent ) bool InputObjectBase::implIsValid() const { - return mxStrm.get() && OutputObjectBase::implIsValid(); + return mxStrm && OutputObjectBase::implIsValid(); } void InputObjectBase::skipBlock( sal_Int64 nBytes, bool bShowSize ) @@ -2318,7 +2318,7 @@ void TextStreamObjectBase::implDump() void TextStreamObjectBase::constructTextStrmObj( rtl_TextEncoding eTextEnc ) { - if( mxStrm.get() ) + if( mxStrm ) mxTextStrm = std::make_shared<TextInputStream>( getContext(), *mxStrm, eTextEnc ); } @@ -2450,7 +2450,7 @@ void RecordObjectBase::construct( const ObjectBase& rParent, bool RecordObjectBase::implIsValid() const { - return mxBaseStrm.get() && InputObjectBase::implIsValid(); + return mxBaseStrm && InputObjectBase::implIsValid(); } void RecordObjectBase::implDump() diff --git a/oox/source/dump/oledumper.cxx b/oox/source/dump/oledumper.cxx index 80485c453b7c..290ace6b39c0 100644 --- a/oox/source/dump/oledumper.cxx +++ b/oox/source/dump/oledumper.cxx @@ -1859,7 +1859,7 @@ VbaDirStreamObject::VbaDirStreamObject( const ObjectBase& rParent, mrVbaData( rVbaData ) { mxInStrm = rxStrm; - if( mxInStrm.get() ) + if( mxInStrm ) { BinaryInputStreamRef xVbaStrm( std::make_shared<::oox::ole::VbaInputStream>( *mxInStrm ) ); SequenceRecordObjectBase::construct( rParent, xVbaStrm, rSysFileName, "VBA-DIR-RECORD-NAMES", "VBA-DIR-SIMPLE-RECORDS" ); @@ -1868,7 +1868,7 @@ VbaDirStreamObject::VbaDirStreamObject( const ObjectBase& rParent, bool VbaDirStreamObject::implIsValid() const { - return mxInStrm.get() && SequenceRecordObjectBase::implIsValid(); + return mxInStrm && SequenceRecordObjectBase::implIsValid(); } bool VbaDirStreamObject::implReadRecordHeader( BinaryInputStream& rBaseStrm, sal_Int64& ornRecId, sal_Int64& ornRecSize ) |