[PATCH] D61566: Fix for bug 41747: AST Printer doesn't print nested name specifier for out of scope record definitions
dyatkovskiy created this revision. dyatkovskiy added a project: clang. Herald added a subscriber: cfe-commits. This fix adds out of scope member classes definitions support for AST Printer. Repository: rC Clang https://reviews.llvm.org/D61566 Files: clang/lib/AST/DeclPrinter.cpp clang/test/AST/ast-print-record-decl.c Index: clang/test/AST/ast-print-record-decl.c === --- clang/test/AST/ast-print-record-decl.c +++ clang/test/AST/ast-print-record-decl.c @@ -287,5 +287,21 @@ // PRINT-NEXT: }; }; +#ifdef __cplusplus +// PRINT-CXX-LABEL: outOfRecordDef +void outOfRecordDef () { + // PRINT-CXX-NEXT: struct DeclEnclosing { + struct DeclEnclosing { +// PRINT-CXX-NEXT: struct DeclMember; +struct DeclMember; + // PRINT-CXX-NEXT: }; + }; + // PRINT-CXX-NEXT: struct DeclEnclosing::DeclMember { + struct DeclEnclosing::DeclMember { + // PRINT-CXX-NEXT: }; + }; +} +#endif + // A tag decl group in the tag decl's own member list is exercised in // defSelfRef above. Index: clang/lib/AST/DeclPrinter.cpp === --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -953,7 +953,12 @@ prettyPrintAttributes(D); if (D->getIdentifier()) { -Out << ' ' << *D; +Out << ' '; + +if (auto *Q = D->getQualifier()) + Q->print(Out, Policy); + +Out << *D; if (auto S = dyn_cast(D)) printTemplateArguments(S->getTemplateArgs(), S->getTemplateParameters()); Index: clang/test/AST/ast-print-record-decl.c === --- clang/test/AST/ast-print-record-decl.c +++ clang/test/AST/ast-print-record-decl.c @@ -287,5 +287,21 @@ // PRINT-NEXT: }; }; +#ifdef __cplusplus +// PRINT-CXX-LABEL: outOfRecordDef +void outOfRecordDef () { + // PRINT-CXX-NEXT: struct DeclEnclosing { + struct DeclEnclosing { +// PRINT-CXX-NEXT: struct DeclMember; +struct DeclMember; + // PRINT-CXX-NEXT: }; + }; + // PRINT-CXX-NEXT: struct DeclEnclosing::DeclMember { + struct DeclEnclosing::DeclMember { + // PRINT-CXX-NEXT: }; + }; +} +#endif + // A tag decl group in the tag decl's own member list is exercised in // defSelfRef above. Index: clang/lib/AST/DeclPrinter.cpp === --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -953,7 +953,12 @@ prettyPrintAttributes(D); if (D->getIdentifier()) { -Out << ' ' << *D; +Out << ' '; + +if (auto *Q = D->getQualifier()) + Q->print(Out, Policy); + +Out << *D; if (auto S = dyn_cast(D)) printTemplateArguments(S->getTemplateArgs(), S->getTemplateParameters()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D61566: Fix for bug 41747: AST Printer doesn't print nested name specifier for out of scope record definitions
dyatkovskiy added a comment. @jdenny ? @sepavloff ? ping Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61566/new/ https://reviews.llvm.org/D61566 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D61566: Fix for bug 41747: AST Printer doesn't print nested name specifier for out of scope record definitions
dyatkovskiy updated this revision to Diff 198771. dyatkovskiy added a comment. Patch updates per review remarks CHANGES SINCE LAST ACTION https://reviews.llvm.org/D61566/new/ https://reviews.llvm.org/D61566 Files: clang/lib/AST/DeclPrinter.cpp clang/test/AST/ast-print-record-decl.c Index: clang/test/AST/ast-print-record-decl.c === --- clang/test/AST/ast-print-record-decl.c +++ clang/test/AST/ast-print-record-decl.c @@ -289,3 +289,21 @@ // A tag decl group in the tag decl's own member list is exercised in // defSelfRef above. + +#ifdef __cplusplus +// PRINT-CXX-LABEL: outOfRecordDef +void outOfRecordDef () { + + // PRINT-CXX-NEXT: struct DeclEnclosing { + // PRINT-CXX-NEXT: struct DeclMember; + // PRINT-CXX-NEXT: }; + struct DeclEnclosing { +struct DeclMember; + }; + + // PRINT-CXX-NEXT: struct DeclEnclosing::DeclMember { + // PRINT-CXX-NEXT: }; + struct DeclEnclosing::DeclMember { + }; +} +#endif Index: clang/lib/AST/DeclPrinter.cpp === --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -953,7 +953,12 @@ prettyPrintAttributes(D); if (D->getIdentifier()) { -Out << ' ' << *D; +Out << ' '; + +if (const NestedNameSpecifier *Q = D->getQualifier()) + Q->print(Out, Policy); + +Out << *D; if (auto S = dyn_cast(D)) printTemplateArguments(S->getTemplateArgs(), S->getTemplateParameters()); Index: clang/test/AST/ast-print-record-decl.c === --- clang/test/AST/ast-print-record-decl.c +++ clang/test/AST/ast-print-record-decl.c @@ -289,3 +289,21 @@ // A tag decl group in the tag decl's own member list is exercised in // defSelfRef above. + +#ifdef __cplusplus +// PRINT-CXX-LABEL: outOfRecordDef +void outOfRecordDef () { + + // PRINT-CXX-NEXT: struct DeclEnclosing { + // PRINT-CXX-NEXT: struct DeclMember; + // PRINT-CXX-NEXT: }; + struct DeclEnclosing { +struct DeclMember; + }; + + // PRINT-CXX-NEXT: struct DeclEnclosing::DeclMember { + // PRINT-CXX-NEXT: }; + struct DeclEnclosing::DeclMember { + }; +} +#endif Index: clang/lib/AST/DeclPrinter.cpp === --- clang/lib/AST/DeclPrinter.cpp +++ clang/lib/AST/DeclPrinter.cpp @@ -953,7 +953,12 @@ prettyPrintAttributes(D); if (D->getIdentifier()) { -Out << ' ' << *D; +Out << ' '; + +if (const NestedNameSpecifier *Q = D->getQualifier()) + Q->print(Out, Policy); + +Out << *D; if (auto S = dyn_cast(D)) printTemplateArguments(S->getTemplateArgs(), S->getTemplateParameters()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits