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:
parent
7c0c1524f4
commit
b0e819bbc0
2 changed files with 7 additions and 5 deletions
|
@ -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;
|
||||
|
|
|
@ -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 \
|
||||
|
|
Loading…
Reference in a new issue