Fix loplugin:staticconstfield

...(ExprWithCleanups around the CXXConstructExpr in initializers for members of
O[U]String type, with older Clang, as used in
compilerplugins/clang/test/staticconstfield.cxx), and thus revert
e3e8d52625 "Temporarily disable
compilerplugins/clang/test/staticconstfield" again.

Change-Id: Ic5fcdd1a26e4a6810369e4f9d909200d25feb12e
Reviewed-on: https://gerrit.libreoffice.org/63628
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
Stephan Bergmann 2018-11-20 08:58:39 +01:00
parent 7c0c1524f4
commit b0e819bbc0
2 changed files with 7 additions and 5 deletions

View file

@ -95,10 +95,11 @@ bool StaticConstField::TraverseConstructorInitializer(CXXCtorInitializer* init)
bool found = false;
std::string value;
auto const initexpr = compat::IgnoreImplicit(init->getInit());
if (tc.Const().Class("OUString").Namespace("rtl").GlobalNamespace()
|| tc.Const().Class("OString").Namespace("rtl").GlobalNamespace())
{
if (auto constructExpr = dyn_cast<CXXConstructExpr>(init->getInit()))
if (auto constructExpr = dyn_cast<CXXConstructExpr>(initexpr))
{
if (constructExpr->getNumArgs() >= 1
&& isa<clang::StringLiteral>(constructExpr->getArg(0)))
@ -112,7 +113,7 @@ bool StaticConstField::TraverseConstructorInitializer(CXXCtorInitializer* init)
else if (type->isFloatingType())
{
APFloat x1(0.0f);
if (init->getInit()->EvaluateAsFloat(x1, compiler.getASTContext()))
if (initexpr->EvaluateAsFloat(x1, compiler.getASTContext()))
{
std::string s;
llvm::raw_string_ostream os(s);
@ -123,15 +124,15 @@ bool StaticConstField::TraverseConstructorInitializer(CXXCtorInitializer* init)
}
#endif
// ignore this, it seems to trigger an infinite recursion
else if (isa<UnaryExprOrTypeTraitExpr>(init->getInit()))
else if (isa<UnaryExprOrTypeTraitExpr>(initexpr))
;
// ignore this, calling EvaluateAsInt on it will crash clang
else if (init->getInit()->isValueDependent())
else if (initexpr->isValueDependent())
;
else
{
APSInt x1;
if (init->getInit()->EvaluateAsInt(x1, compiler.getASTContext()))
if (initexpr->EvaluateAsInt(x1, compiler.getASTContext()))
{
value = x1.toString(10);
found = true;

View file

@ -53,6 +53,7 @@ $(eval $(call gb_CompilerTest_add_exception_objects,compilerplugins_clang, \
compilerplugins/clang/test/simplifyconstruct \
compilerplugins/clang/test/simplifydynamiccast \
compilerplugins/clang/test/singlevalfields \
compilerplugins/clang/test/staticconstfield \
compilerplugins/clang/test/staticvar \
compilerplugins/clang/test/stringbuffer \
compilerplugins/clang/test/stringconstant \