[clang] 2878282 - [clang][DeclPrinter] Fix AST print of out-of-line record definitions

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 7 07:58:11 PDT 2023


Author: Timo Stripf
Date: 2023-06-07T10:57:31-04:00
New Revision: 2878282dc550e6a8174917480a2dc22bbe283ed1

URL: https://github.com/llvm/llvm-project/commit/2878282dc550e6a8174917480a2dc22bbe283ed1
DIFF: https://github.com/llvm/llvm-project/commit/2878282dc550e6a8174917480a2dc22bbe283ed1.diff

LOG: [clang][DeclPrinter] Fix AST print of out-of-line record definitions

DeclPrinter::VisitCXXRecordDecl did not output qualifiers for records.
As result, the output of out-of-line record definitions was incorrect.

Differential Revision: https://reviews.llvm.org/D151528

Added: 
    

Modified: 
    clang/lib/AST/DeclPrinter.cpp
    clang/test/AST/ast-print-record-decl.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp
index f3bad9f45b74d..932e9b23ebe7f 100644
--- a/clang/lib/AST/DeclPrinter.cpp
+++ b/clang/lib/AST/DeclPrinter.cpp
@@ -997,7 +997,10 @@ void DeclPrinter::VisitCXXRecordDecl(CXXRecordDecl *D) {
   prettyPrintAttributes(D);
 
   if (D->getIdentifier()) {
-    Out << ' ' << *D;
+    Out << ' ';
+    if (auto *NNS = D->getQualifier())
+      NNS->print(Out, Policy);
+    Out << *D;
 
     if (auto S = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
       ArrayRef<TemplateArgument> Args = S->getTemplateArgs().asArray();

diff  --git a/clang/test/AST/ast-print-record-decl.c b/clang/test/AST/ast-print-record-decl.c
index 8553e98b8251f..d3717a4feab83 100644
--- a/clang/test/AST/ast-print-record-decl.c
+++ b/clang/test/AST/ast-print-record-decl.c
@@ -289,3 +289,19 @@ KW DeclGroupInMemberList {
 
 // A tag decl group in the tag decl's own member list is exercised in
 // defSelfRef above.
+
+
+// Check out-of-line record definition
+#ifdef __cplusplus
+// PRINT-CXX-NEXT: [[KW]] OutOfLineRecord {
+KW OutOfLineRecord {
+  // PRINT-CXX-NEXT: [[KW]] Inner
+  KW Inner;
+  // PRINT-CXX-NEXT: };
+};
+
+// PRINT-CXX-NEXT: [[KW]] OutOfLineRecord::Inner {
+KW OutOfLineRecord::Inner {
+  // PRINT-CXX-NEXT: };
+};
+#endif


        


More information about the cfe-commits mailing list