Loosen the asserts due to not well-enough-understood behavior in clang. Maybe it's a bug or it is a feature.

This commit is contained in:
Vassil Vassilev 2013-08-08 14:50:44 +02:00 committed by sftnight
parent a0850bbf4c
commit e8e2932892

View File

@ -117,6 +117,19 @@ namespace cling {
// Check for duplicates
for (size_t i = 0, e = m_DeclQueue.size(); i < e; ++i) {
DelayCallInfo &oldDCI (m_DeclQueue[i]);
// FIXME: This is possible bug in clang, which will instantiate one and
// the same CXXStaticMemberVar several times. This happens when there are
// two dependent expressions and the first uses another declaration from
// the redeclaration chain. This will force Sema in to instantiate the
// definition (usually the most recent decl in the chain) and then the
// second expression might referece the definition (which was already)
// instantiated, but Sema seems not to keep track of these kinds of
// instantiations, even though the points of instantiation are the same!
//
// This should be investigated further when we merge with newest clang.
// This is triggered by running the roottest: ./root/io/newstl
if (oldDCI.m_Call == kCCIHandleCXXStaticMemberVarInstantiation)
continue;
// It is possible to have duplicate calls to HandleVTable with the same
// declaration, because each time Sema believes a vtable is used it emits
// that callback.