rsmith added a comment.

In D78760#2005874 <https://reviews.llvm.org/D78760#2005874>, @ahatanak wrote:

> `TagDecl::isDependentType()` is returning true.


Oh, sorry, we do already do the thing I was suggesting. But in your testcase 
the issue is that the base class `B0` is dependent but is also resolved during 
template instantiation to a (dependent) class type. We should handle this by 
skipping dependent base classes, not by skipping incomplete base classes. For 
example, consider this testcase (which currently asserts):

  struct A {};
  template<typename T> struct X {
    struct B : A {};
    struct C : A, B {};
  };

here, we can resolve the `B` base of `C` to the member `C` of the current 
instantiation, but we should not traverse to `B`'s base class list when 
considering the base classes of `C`, because we do not know that that 
definition of `B` will be used by any particular instantiation of `C`. For 
example:

  template<> struct X<int>::B {};
  X<int>::C c; // has only one `A` base class


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78760



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

Reply via email to