compilerplugins/clang/plugin.cxx | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
New commits: commit de4708fcafbdd99ee0c585f980edcc3bb230c105 Author: Stephan Bergmann <stephan.bergm...@allotropia.de> AuthorDate: Thu May 30 09:27:29 2024 +0200 Commit: Stephan Bergmann <stephan.bergm...@allotropia.de> CommitDate: Fri May 31 12:27:51 2024 +0200 Avoid --enable-compiler-plugins=debug loplugin:overrideparam TODO warning > cui/source/factory/dlgfact.hxx:531:116: fatal error: TODO: Unexpected 'IdenticalDefaultArgumentsResult::Maybe' [loplugin:overrideparam] > 531 | const OUString& rName, const OUString& rDesc, const OUString& rTitle = u""_ustr) override; > | ^~~~~~~~ > include/svx/svxdlg.hxx:380:116: note: TODO: second argument is here [loplugin:overrideparam] > 380 | const OUString& rName, const OUString& rDesc, const OUString& rTitle = u""_ustr ) = 0; > | ^~~~~~~~ > MaterializeTemporaryExpr 0x1732504d0 'const OUString':'const class rtl::OUString' lvalue > `-ImplicitCastExpr 0x1732504b8 'const OUString':'const class rtl::OUString' <NoOp> > `-CXXBindTemporaryExpr 0x173250498 'OUString':'class rtl::OUString' (CXXTemporary 0x173250498) > `-UserDefinedLiteral 0x173250468 'OUString':'class rtl::OUString' > `-ImplicitCastExpr 0x173250450 'OUString (*)(void)' <FunctionToPointerDecay> > `-DeclRefExpr 0x173250430 'OUString (void)' lvalue Function 0x14a24f188 'operator""_ustr' 'OUString (void)' > MaterializeTemporaryExpr 0x14a250658 'const OUString':'const class rtl::OUString' lvalue > `-ImplicitCastExpr 0x14a250640 'const OUString':'const class rtl::OUString' <NoOp> > `-CXXBindTemporaryExpr 0x14a250620 'OUString':'class rtl::OUString' (CXXTemporary 0x14a250620) > `-UserDefinedLiteral 0x14a2505f0 'OUString':'class rtl::OUString' > `-ImplicitCastExpr 0x14a2505d8 'OUString (*)(void)' <FunctionToPointerDecay> > `-DeclRefExpr 0x14a24f298 'OUString (void)' lvalue Function 0x14a24f188 'operator""_ustr' 'OUString (void)' (Unfortunately, there appears to be no way to get at the actual string literal content here to check it for equality, so keep returning Maybe for now.) Change-Id: I4beac3c7f17a689488a41efe5da0554af7beff65 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168246 Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de> Tested-by: Jenkins diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx index 8d8207d30437..f47fc01bd074 100644 --- a/compilerplugins/clang/plugin.cxx +++ b/compilerplugins/clang/plugin.cxx @@ -611,6 +611,20 @@ Plugin::IdenticalDefaultArgumentsResult Plugin::checkIdenticalDefaultArguments( : IdenticalDefaultArgumentsResult::No; } } + if (auto const lit1 = dyn_cast<clang::UserDefinedLiteral>( + argument1->IgnoreImplicit()->IgnoreParens())) + { + if (auto const lit2 = dyn_cast<clang::UserDefinedLiteral>( + argument2->IgnoreImplicit()->IgnoreParens())) + { + return lit1->getLiteralOperatorKind() == clang::UserDefinedLiteral::LOK_Template + && lit2->getLiteralOperatorKind() == clang::UserDefinedLiteral::LOK_Template + && lit1->getCalleeDecl()->getCanonicalDecl() + == lit2->getCalleeDecl()->getCanonicalDecl() + ? IdenticalDefaultArgumentsResult::Maybe //TODO: obtain content to compare + : IdenticalDefaultArgumentsResult::No; + } + } // catch params with defaults like "= OUString()" for (Expr const * e1 = desugared1, * e2 = desugared2;;) { auto const ce1 = dyn_cast<CXXConstructExpr>(skipImplicit(e1));