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