[PATCH] D45465: [AST] Fix printing tag decl groups in decl contexts

Richard Smith - zygoloid via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon May 14 14:40:37 PDT 2018


rsmith added inline comments.


================
Comment at: lib/AST/DeclPrinter.cpp:393-397
       if (!BaseType.isNull() && isa<ElaboratedType>(BaseType))
         BaseType = cast<ElaboratedType>(BaseType)->getNamedType();
       if (!BaseType.isNull() && isa<TagType>(BaseType) &&
-          cast<TagType>(BaseType)->getDecl() == Decls[0]) {
+          cast<TagType>(BaseType) ==
+              cast<TagDecl>(Decls[0])->getTypeForDecl()) {
----------------
I would think the right thing to check here is that the `ElaboratedType`'s `OwnedTagDecl` is `Decls[0]`. Currently, you also allow cases where it's merely a redeclaration of that same `TagDecl`, which will combine together declarations too often...


================
Comment at: test/Misc/ast-print-record-decl.c:161-171
+  // PRINT-NEXT:    [[KW]] __attribute__((may_alias)) T *p3, *p4;
+  // PRINT-NEXT:  } *p1;
+  KW __attribute__((aligned(64))) T BASES { // expected-warning {{'T' is deprecated}}
     int i;
     KW T *p2;
+    // FIXME: For C++, T at p3 loses aligned and deprecated, perhaps because
+    // that RecordDecl isn't in the same redecl list.  Perhaps the redecl lists
----------------
... such as here, for example. Because the two `KW T` declarations redeclare the same `TagDecl`, they will get merged by `-ast-print`.


https://reviews.llvm.org/D45465





More information about the cfe-commits mailing list