Index: Sema/SemaDeclCXX.cpp =================================================================== --- Sema/SemaDeclCXX.cpp +++ Sema/SemaDeclCXX.cpp @@ -2417,9 +2417,16 @@ // Attach the remaining base class specifiers to the derived class. Class->setBases(Bases.data(), NumGoodBases); + // Check that the only base classes that are duplicate are virtual. for (unsigned idx = 0; idx < NumGoodBases; ++idx) { // Check whether this direct base is inaccessible due to ambiguity. QualType BaseType = Bases[idx]->getType(); + + // Skip all dependent types in templates being used as base specifiers. + // Checks below assume that the base specifier is a CXXRecord. + if (BaseType->isDependentType()) + continue; + CanQualType CanonicalBase = Context.getCanonicalType(BaseType) .getUnqualifiedType(); Index: SemaCXX/base-class-ambiguity-check.cpp =================================================================== --- /dev/null +++ SemaCXX/base-class-ambiguity-check.cpp @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -fsyntax-only %s + +template class Foo { + struct Base : T {}; + + // Up to commit 680b3a8619 (2018-01-10) this produced a crash in Sema. + struct Derived : Base, T {}; +};