tahonermann added inline comments.

================
Comment at: clang/lib/Sema/SemaTemplate.cpp:10112
+      Specialization->addAttr(PrevDecl->getAttr<MSInheritanceAttr>());
+      Consumer.AssignInheritanceModel(Specialization);
+    }
----------------
erichkeane wrote:
> tahonermann wrote:
> > I am concerned that moving the call to `Consumer.AssignInheritanceModel()` 
> > to immediately after the creation of the node, but before it is populated 
> > might be problematic. Previously, this call was still made before the node 
> > was completely constructed (e.g., before `setTemplateSpecializationKind()` 
> > is called for it). It is difficult to tell if any consumers might be 
> > dependent on more of the definition being present. 
> SO I think we still need to do this off of the definition, right?  Else if 
> `PrevDecl` ends up being a declaration (followed later by a definition that 
> has the attribute), we'll end up missing it?  Typically attributes are 
> 'added' by later decls, so only the 'latest one' (though attributes can't be 
> added after definition IIRC) has 'them all'.
This handles the situation where a new node is created for either an explicit 
template instantiation declaration or definition; that matches prior behavior. 
The goal is to ensure each node, regardless of the reason for its creation, 
inherits the attribute from the previous declaration; that ensures that any 
explicitly declared attributes are checked for consistency (see 
`Sema::mergeMSInheritanceAttr()`).

Note that an explicit class template specialization is not allowed to follow an 
explicit template instantiation declaration or definition. 
https://godbolt.org/z/cbvaac717.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D158869/new/

https://reviews.llvm.org/D158869

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to