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.