Commit c8a6ff51 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r310158:

------------------------------------------------------------------------
r310158 | rtrieu | 2017-08-04 17:54:19 -0700 (Fri, 04 Aug 2017) | 8 lines

[ODRHash] Treat some non-templated classes as templated.

When using nested classes, if the inner class is not templated, but the outer
class is templated, the inner class will not be templated, but may have some
traits as if it were.  This is particularly evident if the inner class
refers to the outer class in some fashion.  Treat any class that is in the
context of a templated class as also a templated class.

------------------------------------------------------------------------

llvm-svn: 310302
parent 6f335f8b
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -378,9 +378,13 @@ void ODRHash::AddCXXRecordDecl(const CXXRecordDecl *Record) {
  assert(Record && Record->hasDefinition() &&
         "Expected non-null record to be a definition.");

  if (isa<ClassTemplateSpecializationDecl>(Record)) {
  const DeclContext *DC = Record;
  while (DC) {
    if (isa<ClassTemplateSpecializationDecl>(DC)) {
      return;
    }
    DC = DC->getParent();
  }

  AddDecl(Record);