Testcase: struct A { ~A(); }; template <class T> struct B {}; template <> struct B<int> : private A {}; B<int> foo; Crashes with the following assertion: clang-cc: /home/eli/llvm/tools/clang/lib/AST/DeclarationName.cpp:306: clang::DeclarationName clang::DeclarationNameTable::getCXXSpecialName(clang::DeclarationName::NameKind, clang::QualType): Assertion `Ty->isCanonical() && "Can only build C++ special names from canonical types"' failed.
I'm not able to reproduce this one with trunk. I get another assertion if I try to emit code, but it does not look related.
I bet the bug was fixed when we introduced canonical type smart pointers; getCXXSpecialName is now (statically) guaranteed to get a canonical type. Closing!