rsmith added inline comments.
================ Comment at: include/clang/AST/Type.h:4852-4855 +/// \brief Represents a type occurrence that either (1) refers to the type +/// using an elaborated type keyword, e.g., struct S, (2) refers to the type +/// via a qualified name, e.g., N::M::type, (3) owns a (re)declaration of that +/// type, or (4) some combination of those. ---------------- I think it's better to keep this as-is: the "owns a (re)declaration" case is a special case of using an elaborated type keyword. ================ Comment at: include/clang/AST/Type.h:4905 + /// + /// FIXME: This is set for tag types but not necessarily other types. + /// FIXME: The TypeDecl returned is not always exactly faithful to the ---------------- Are there other types for which it would be meaningful? (If not, we could store and expose this as a `TagDecl` instead.) ================ Comment at: include/clang/AST/Type.h:4906-4916 + /// FIXME: The TypeDecl returned is not always exactly faithful to the + /// original source because, when building the AST, the parser (1) adds + /// all attributes declared on a tag to all later redeclarations of that + /// tag (that is, tag occurrences declaring an attribute or member list), + /// and (2) drops attributes declared on a tag after an occurrence of that + /// tag declaring a member list. When printing the AST, the first change + /// should not affect semantics or diagnostics because it merely reveals ---------------- You can use `isInherited()` on the attribute to find out whether it was written on that declaration or inherited. https://reviews.llvm.org/D45463 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits