mizvekov added a comment.
In D112374#3657472 <https://reviews.llvm.org/D112374#3657472>, @kimgr wrote:
> I can't say what the best solution is, but this patch generates quite a lot
> of work for me, and I would really hope that catching up with the new AST
> does not generate even more work down the line.
Okay, I checked out IWYU and I see why you need to look at ElaboratedType in
some cases. And that also answers a lot of my previous questions.
Some type nodes were before rarely ever elaborated, but will have an
ElaboratedType over them consistently now.
Searching IWYU source code, some cases where dyn_cast is used in some of them:
iwyu.cc:
// If we're a constructor, we also need to construct the entire class,
// even typedefs that aren't used at construct time. Try compiling
// template<class T> struct C { typedef typename T::a t; };
// class S; int main() { C<S> c; }
if (isa<CXXConstructorDecl>(fn_decl)) {
CHECK_(parent_type && "How can a constructor have no parent?");
parent_type = RemoveElaboration(parent_type);
if (!TraverseDataAndTypeMembersOfClassHelper(
dyn_cast<TemplateSpecializationType>(parent_type)))
return false;
}
return true;
`
if (const auto* enum_type = dyn_cast<EnumType>(type))
return !CanBeOpaqueDeclared(enum_type);
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112374/new/
https://reviews.llvm.org/D112374
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits