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
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user