Kaydet (Commit) 33ee8e61 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Work around bug in Clang 3.8

...that causes

> clang/lib/AST/Type.cpp:1878: bool clang::Type::isConstantSizeType() const: Assertion `!isDependentType() && "This doesn't make sense for dependent types"' failed.

compilation failure in PCodeBufferWalker in basic/source/comp/codegen.cxx

>    static T readParam( sal_uInt8 const *& pCode )
>    {
>        short nBytes = sizeof( T );
>        T nOp1=0;
>        for ( int i=0; i<nBytes; ++i )
>            nOp1 |= *pCode++ << ( i * 8);
>        return nOp1;
>    }

with loplugin:oncevar.

Change-Id: I25417076549ea538adf013282f3657e0d642d776
üst a5c200bd
......@@ -162,10 +162,26 @@ bool OnceVar::VisitVarDecl( const VarDecl* varDecl )
}
}
}
if (!foundStringLiteral
&& !varDecl->getInit()->isConstantInitializer(compiler.getASTContext(), false/*ForRef*/))
{
return true;
if (!foundStringLiteral) {
auto const init = varDecl->getInit();
#if CLANG_VERSION < 30900
// Work around missing Clang 3.9 fix <https://reviews.llvm.org/rL271762>
// "Sema: do not attempt to sizeof a dependent type" (while an
// initializer expression of the form
//
// sizeof (T)
//
// with dependent type T /is/ constant, keep consistent here with the
// (arguably broken) behavior of isConstantInitalizer returning false in
// Clang >= 3.9):
if (init->isValueDependent()) {
return true;
}
#endif
if (!init->isConstantInitializer(compiler.getASTContext(), false/*ForRef*/))
{
return true;
}
}
maVarDeclSet.insert(varDecl);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment