[libcxx-commits] [PATCH] D112374: [clang] Implement ElaboratedType sugaring for types written bare

Matheus Izvekov via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Sat Jul 16 15:48:23 PDT 2022


mizvekov added a comment.

@kimgr One other general comment.

The way this function is implemented is quite error prone:

  static const NamedDecl* TypeToDeclImpl(const Type* type, bool as_written) {
    // Get past all the 'class' and 'struct' prefixes, and namespaces.
    type = RemoveElaboration(type);
  
    // Read past SubstTemplateTypeParmType (this can happen if a
    // template function returns the tpl-arg type: e.g. for
    // 'T MyFn<T>() {...}; MyFn<X>.a', the type of MyFn<X> will be a Subst.
    type = RemoveSubstTemplateTypeParm(type);
  
    CHECK_(!isa<ObjCObjectType>(type) && "IWYU doesn't support Objective-C");

Ie the beginning is being too explicit, testing for very specific sugar type nodes kinds, in a very specific order, just to skip over them.

That makes it very fragile against clang changes.

You can instead just use `getAs` to step over them in a generic fashion.

I don't think this one gets broken by this MR, but I am very confident it will get broken by another patch I have.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112374



More information about the libcxx-commits mailing list