summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-07-03 10:33:13 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-07-03 10:33:13 +0200
commit33ee8e61292af05627f5f72ea2f93ad80e715e46 (patch)
tree93caab95248600e1463fa765274cb5b870bb0eb7 /compilerplugins
parenta5c200bddd51cba75d30f37a33541778ba8223b4 (diff)
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
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/oncevar.cxx24
1 files changed, 20 insertions, 4 deletions
diff --git a/compilerplugins/clang/oncevar.cxx b/compilerplugins/clang/oncevar.cxx
index 1fa6cd53acf0..41feb23b3280 100644
--- a/compilerplugins/clang/oncevar.cxx
+++ b/compilerplugins/clang/oncevar.cxx
@@ -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);