[cfe-commits] r173548 - Highlight various parts of the AST dump with color. Colors are controlled by

Richard Trieu rtrieu at google.com
Fri Jan 25 17:31:20 PST 2013


Author: rtrieu
Date: Fri Jan 25 19:31:20 2013
New Revision: 173548

URL: http://llvm.org/viewvc/llvm-project?rev=173548&view=rev
Log:
Highlight various parts of the AST dump with color.  Colors are controlled by
-f(no-)color-diagnostics.  In addition, dumpColor() function calls are added
to force color printing.  No structural changes to -ast-dump.


Added:
    cfe/trunk/test/Misc/ast-dump-color.cpp
Modified:
    cfe/trunk/include/clang/AST/Comment.h
    cfe/trunk/include/clang/AST/DeclBase.h
    cfe/trunk/include/clang/AST/Stmt.h
    cfe/trunk/lib/AST/ASTDumper.cpp

Modified: cfe/trunk/include/clang/AST/Comment.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Comment.h?rev=173548&r1=173547&r2=173548&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Comment.h (original)
+++ cfe/trunk/include/clang/AST/Comment.h Fri Jan 25 19:31:20 2013
@@ -171,6 +171,7 @@ public:
   const char *getCommentKindName() const;
 
   LLVM_ATTRIBUTE_USED void dump() const;
+  LLVM_ATTRIBUTE_USED void dumpColor() const;
   LLVM_ATTRIBUTE_USED void dump(const ASTContext &Context) const;
   void dump(raw_ostream &OS, const CommandTraits *Traits,
             const SourceManager *SM) const;

Modified: cfe/trunk/include/clang/AST/DeclBase.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=173548&r1=173547&r2=173548&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclBase.h (original)
+++ cfe/trunk/include/clang/AST/DeclBase.h Fri Jan 25 19:31:20 2013
@@ -862,6 +862,8 @@ public:
                          unsigned Indentation = 0);
   // Debuggers don't usually respect default arguments.
   LLVM_ATTRIBUTE_USED void dump() const;
+  // Same as dump(), but forces color printing.
+  LLVM_ATTRIBUTE_USED void dumpColor() const;
   void dump(raw_ostream &Out) const;
   // Debuggers don't usually respect default arguments.
   LLVM_ATTRIBUTE_USED void dumpXML() const;

Modified: cfe/trunk/include/clang/AST/Stmt.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=173548&r1=173547&r2=173548&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Stmt.h (original)
+++ cfe/trunk/include/clang/AST/Stmt.h Fri Jan 25 19:31:20 2013
@@ -373,6 +373,9 @@ public:
   LLVM_ATTRIBUTE_USED void dump(SourceManager &SM) const;
   void dump(raw_ostream &OS, SourceManager &SM) const;
 
+  /// dumpColor - same as dump(), but forces color highlighting.
+  LLVM_ATTRIBUTE_USED void dumpColor() const;
+
   /// dumpPretty/printPretty - These two methods do a "pretty print" of the AST
   /// back to its original source language syntax.
   void dumpPretty(ASTContext &Context) const;

Modified: cfe/trunk/lib/AST/ASTDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDumper.cpp?rev=173548&r1=173547&r2=173548&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTDumper.cpp (original)
+++ cfe/trunk/lib/AST/ASTDumper.cpp Fri Jan 25 19:31:20 2013
@@ -30,6 +30,46 @@ using namespace clang::comments;
 //===----------------------------------------------------------------------===//
 
 namespace  {
+  // Colors used for various parts of the AST dump
+
+  struct TerminalColor {
+    raw_ostream::Colors Color;
+    bool Bold;
+  };
+
+  // Decl kind names (VarDecl, FunctionDecl, etc)
+  static const TerminalColor DeclKindNameColor = { raw_ostream::GREEN, true };
+  // Attr names (CleanupAttr, GuardedByAttr, etc)
+  static const TerminalColor AttrColor = { raw_ostream::BLUE, true };
+  // Statement names (DeclStmt, ImplicitCastExpr, etc)
+  static const TerminalColor StmtColor = { raw_ostream::MAGENTA, true };
+  // Comment names (FullComment, ParagraphComment, TextComment, etc)
+  static const TerminalColor CommentColor = { raw_ostream::YELLOW, true };
+
+  // Type names (int, float, etc, plus user defined types)
+  static const TerminalColor TypeColor = { raw_ostream::GREEN, false };
+
+  // Pointer address
+  static const TerminalColor AddressColor = { raw_ostream::YELLOW, false };
+  // Source locations
+  static const TerminalColor LocationColor = { raw_ostream::YELLOW, false };
+
+  // lvalue/xvalue
+  static const TerminalColor ValueKindColor = { raw_ostream::CYAN, false };
+  // bitfield/objcproperty/objcsubscript/vectorcomponent
+  static const TerminalColor ObjectKindColor = { raw_ostream::CYAN, false };
+
+  // Null statements
+  static const TerminalColor NullColor = { raw_ostream::BLUE, false };
+
+  // CastKind from CastExpr's
+  static const TerminalColor CastColor = { raw_ostream::RED, false };
+
+  // Value of the statement
+  static const TerminalColor ValueColor = { raw_ostream::CYAN, true };
+  // Decl names
+  static const TerminalColor DeclNameColor = { raw_ostream::CYAN, true };
+
   class ASTDumper
       : public DeclVisitor<ASTDumper>, public StmtVisitor<ASTDumper>,
         public ConstCommentVisitor<ASTDumper> {
@@ -47,6 +87,8 @@ namespace  {
     /// The \c FullComment parent of the comment being dumped.
     const FullComment *FC;
 
+    bool ShowColors;
+
     class IndentScope {
       ASTDumper &Dumper;
     public:
@@ -58,11 +100,31 @@ namespace  {
       }
     };
 
+    class ColorScope {
+      ASTDumper &Dumper;
+    public:
+      ColorScope(ASTDumper &Dumper, TerminalColor Color)
+        : Dumper(Dumper) {
+        if (Dumper.ShowColors)
+          Dumper.OS.changeColor(Color.Color, Color.Bold);
+      }
+      ~ColorScope() {
+        if (Dumper.ShowColors)
+          Dumper.OS.resetColor();
+      }
+    };
+
   public:
     ASTDumper(raw_ostream &OS, const CommandTraits *Traits,
               const SourceManager *SM)
       : OS(OS), Traits(Traits), SM(SM), IndentLevel(0), IsFirstLine(true),
-        LastLocFilename(""), LastLocLine(~0U), FC(0) { }
+        LastLocFilename(""), LastLocLine(~0U), FC(0),
+        ShowColors(SM && SM->getDiagnostics().getShowColors()) { }
+
+    ASTDumper(raw_ostream &OS, const CommandTraits *Traits,
+              const SourceManager *SM, bool ShowColors)
+      : OS(OS), Traits(Traits), SM(SM), IndentLevel(0), IsFirstLine(true),
+        LastLocFilename(""), LastLocLine(~0U), ShowColors(ShowColors) { }
 
     ~ASTDumper() {
       OS << "\n";
@@ -238,10 +300,12 @@ void ASTDumper::unindent() {
 }
 
 void ASTDumper::dumpPointer(const void *Ptr) {
+  ColorScope Color(*this, AddressColor);
   OS << ' ' << Ptr;
 }
 
 void ASTDumper::dumpLocation(SourceLocation Loc) {
+  ColorScope Color(*this, LocationColor);
   SourceLocation SpellingLoc = SM->getSpellingLoc(Loc);
 
   // The general format we print out is filename:line:col, but we drop pieces
@@ -285,6 +349,8 @@ void ASTDumper::dumpSourceRange(SourceRa
 }
 
 void ASTDumper::dumpBareType(QualType T) {
+  ColorScope Color(*this, TypeColor);
+  
   SplitQualType T_split = T.split();
   OS << "'" << QualType::getAsString(T_split) << "'";
 
@@ -302,10 +368,14 @@ void ASTDumper::dumpType(QualType T) {
 }
 
 void ASTDumper::dumpBareDeclRef(const Decl *D) {
-  OS << D->getDeclKindName();
+  {
+    ColorScope Color(*this, DeclKindNameColor);
+    OS << D->getDeclKindName();
+  }
   dumpPointer(D);
 
   if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) {
+    ColorScope Color(*this, DeclNameColor);
     OS << " '";
     ND->getDeclName().printName(OS);
     OS << "'";
@@ -326,8 +396,10 @@ void ASTDumper::dumpDeclRef(const Decl *
 }
 
 void ASTDumper::dumpName(const NamedDecl *ND) {
-  if (ND->getDeclName())
+  if (ND->getDeclName()) {
+    ColorScope Color(*this, DeclNameColor);
     OS << ' ' << ND->getNameAsString();
+  }
 }
 
 void ASTDumper::dumpDeclContext(const DeclContext *DC) {
@@ -340,12 +412,15 @@ void ASTDumper::dumpDeclContext(const De
 
 void ASTDumper::dumpAttr(const Attr *A) {
   IndentScope Indent(*this);
-  switch (A->getKind()) {
+  {
+    ColorScope Color(*this, AttrColor);
+    switch (A->getKind()) {
 #define ATTR(X) case attr::X: OS << #X; break;
 #include "clang/Basic/AttrList.inc"
-  default: llvm_unreachable("unexpected attribute kind");
+    default: llvm_unreachable("unexpected attribute kind");
+    }
+    OS << "Attr";
   }
-  OS << "Attr";
   dumpPointer(A);
   dumpSourceRange(A->getRange());
 #include "clang/AST/AttrDump.inc"
@@ -460,11 +535,15 @@ void ASTDumper::dumpDecl(Decl *D) {
   IndentScope Indent(*this);
 
   if (!D) {
+    ColorScope Color(*this, NullColor);
     OS << "<<<NULL>>>";
     return;
   }
 
-  OS << D->getDeclKindName() << "Decl";
+  {
+    ColorScope Color(*this, DeclKindNameColor);
+    OS << D->getDeclKindName() << "Decl";
+  }
   dumpPointer(D);
   dumpSourceRange(D->getSourceRange());
   DeclVisitor<ASTDumper>::Visit(D);
@@ -981,6 +1060,7 @@ void ASTDumper::dumpStmt(Stmt *S) {
   IndentScope Indent(*this);
 
   if (!S) {
+    ColorScope Color(*this, NullColor);
     OS << "<<<NULL>>>";
     return;
   }
@@ -996,7 +1076,10 @@ void ASTDumper::dumpStmt(Stmt *S) {
 }
 
 void ASTDumper::VisitStmt(Stmt *Node) {
-  OS << Node->getStmtClassName();
+  {   
+    ColorScope Color(*this, StmtColor);
+    OS << Node->getStmtClassName();
+  }
   dumpPointer(Node);
   dumpSourceRange(Node->getSourceRange());
 }
@@ -1034,32 +1117,38 @@ void ASTDumper::VisitExpr(Expr *Node) {
   VisitStmt(Node);
   dumpType(Node->getType());
 
-  switch (Node->getValueKind()) {
-  case VK_RValue:
-    break;
-  case VK_LValue:
-    OS << " lvalue";
-    break;
-  case VK_XValue:
-    OS << " xvalue";
-    break;
+  {
+    ColorScope Color(*this, ValueKindColor);
+    switch (Node->getValueKind()) {
+    case VK_RValue:
+      break;
+    case VK_LValue:
+      OS << " lvalue";
+      break;
+    case VK_XValue:
+      OS << " xvalue";
+      break;
+    }
   }
 
-  switch (Node->getObjectKind()) {
-  case OK_Ordinary:
-    break;
-  case OK_BitField:
-    OS << " bitfield";
-    break;
-  case OK_ObjCProperty:
-    OS << " objcproperty";
-    break;
-  case OK_ObjCSubscript:
-    OS << " objcsubscript";
-    break;
-  case OK_VectorComponent:
-    OS << " vectorcomponent";
-    break;
+  {
+    ColorScope Color(*this, ObjectKindColor);
+    switch (Node->getObjectKind()) {
+    case OK_Ordinary:
+      break;
+    case OK_BitField:
+      OS << " bitfield";
+      break;
+    case OK_ObjCProperty:
+      OS << " objcproperty";
+      break;
+    case OK_ObjCSubscript:
+      OS << " objcsubscript";
+      break;
+    case OK_VectorComponent:
+      OS << " vectorcomponent";
+      break;
+    }
   }
 }
 
@@ -1089,7 +1178,11 @@ static void dumpBasePath(raw_ostream &OS
 
 void ASTDumper::VisitCastExpr(CastExpr *Node) {
   VisitExpr(Node);
-  OS << " <" << Node->getCastKindName();
+  OS << " <";
+  {
+    ColorScope Color(*this, CastColor);
+    OS << Node->getCastKindName();
+  }
   dumpBasePath(OS, Node);
   OS << ">";
 }
@@ -1124,8 +1217,11 @@ void ASTDumper::VisitUnresolvedLookupExp
 void ASTDumper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
   VisitExpr(Node);
 
-  OS << " " << Node->getDecl()->getDeclKindName()
-     << "Decl='" << *Node->getDecl() << "'";
+  {
+    ColorScope Color(*this, DeclKindNameColor);
+    OS << " " << Node->getDecl()->getDeclKindName() << "Decl";
+  }
+  OS << "='" << *Node->getDecl() << "'";
   dumpPointer(Node->getDecl());
   if (Node->isFreeIvar())
     OS << " isFreeIvar";
@@ -1144,6 +1240,7 @@ void ASTDumper::VisitPredefinedExpr(Pred
 
 void ASTDumper::VisitCharacterLiteral(CharacterLiteral *Node) {
   VisitExpr(Node);
+  ColorScope Color(*this, ValueColor);
   OS << " " << Node->getValue();
 }
 
@@ -1151,16 +1248,19 @@ void ASTDumper::VisitIntegerLiteral(Inte
   VisitExpr(Node);
 
   bool isSigned = Node->getType()->isSignedIntegerType();
+  ColorScope Color(*this, ValueColor);
   OS << " " << Node->getValue().toString(10, isSigned);
 }
 
 void ASTDumper::VisitFloatingLiteral(FloatingLiteral *Node) {
   VisitExpr(Node);
+  ColorScope Color(*this, ValueColor);
   OS << " " << Node->getValueAsApproximateDouble();
 }
 
 void ASTDumper::VisitStringLiteral(StringLiteral *Str) {
   VisitExpr(Str);
+  ColorScope Color(*this, ValueColor);
   OS << " ";
   Str->outputString(OS);
 }
@@ -1429,11 +1529,15 @@ void ASTDumper::dumpComment(const Commen
   IndentScope Indent(*this);
 
   if (!C) {
+    ColorScope Color(*this, NullColor);
     OS << "<<<NULL>>>";
     return;
   }
 
-  OS << C->getCommentKindName();
+  {
+    ColorScope Color(*this, CommentColor);
+    OS << C->getCommentKindName();
+  }
   dumpPointer(C);
   dumpSourceRange(C->getSourceRange());
   ConstCommentVisitor<ASTDumper>::visit(C);
@@ -1556,6 +1660,11 @@ void Decl::dump(raw_ostream &OS) const {
   P.dumpDecl(const_cast<Decl*>(this));
 }
 
+void Decl::dumpColor() const {
+  ASTDumper P(llvm::errs(), &getASTContext().getCommentCommandTraits(),
+              &getASTContext().getSourceManager(), /*ShowColors*/true);
+  P.dumpDecl(const_cast<Decl*>(this));
+}
 //===----------------------------------------------------------------------===//
 // Stmt method implementations
 //===----------------------------------------------------------------------===//
@@ -1574,6 +1683,11 @@ void Stmt::dump() const {
   P.dumpStmt(const_cast<Stmt*>(this));
 }
 
+void Stmt::dumpColor() const {
+  ASTDumper P(llvm::errs(), 0, 0, /*ShowColors*/true);
+  P.dumpStmt(const_cast<Stmt*>(this));
+}
+
 //===----------------------------------------------------------------------===//
 // Comment method implementations
 //===----------------------------------------------------------------------===//
@@ -1593,3 +1707,9 @@ void Comment::dump(raw_ostream &OS, cons
   ASTDumper D(OS, Traits, SM);
   D.dumpFullComment(FC);
 }
+
+void Comment::dumpColor() const {
+  const FullComment *FC = dyn_cast<FullComment>(this);
+  ASTDumper D(llvm::errs(), 0, 0, /*ShowColors*/true);
+  D.dumpFullComment(FC);
+}

Added: cfe/trunk/test/Misc/ast-dump-color.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/ast-dump-color.cpp?rev=173548&view=auto
==============================================================================
--- cfe/trunk/test/Misc/ast-dump-color.cpp (added)
+++ cfe/trunk/test/Misc/ast-dump-color.cpp Fri Jan 25 19:31:20 2013
@@ -0,0 +1,87 @@
+// RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++11 -ast-dump -fcolor-diagnostics %s | FileCheck --strict-whitespace %s
+// REQUIRES: ansi-escape-sequences
+
+/// <a>Hello</a>
+/// <br/>
+int Test __attribute__((unused));
+
+/// Comment
+void TestAttributedStmt() {
+  switch (1) {
+  case 1:
+    [[clang::fallthrough]];
+  case 2:
+    ;
+  }
+}
+
+class __attribute__((lockable)) Mutex {
+  /// A variable
+  int var1;
+  /// Another variable
+  ///
+  /// Like the other variable, but different
+  int var2;
+} mu1, mu2;
+int TestExpr __attribute__((guarded_by(mu1)));
+
+//CHECK: {{^}}({{.}}[0;1;32mTranslationUnitDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33m<invalid sloc>{{.}}[0m>{{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mTypedefDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33m<invalid sloc>{{.}}[0m>{{.}}[0;1;36m __int128_t{{.}}[0m {{.}}[0;32m'__int128'{{.}}[0m){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mTypedefDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33m<invalid sloc>{{.}}[0m>{{.}}[0;1;36m __uint128_t{{.}}[0m {{.}}[0;32m'unsigned __int128'{{.}}[0m){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mTypedefDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33m<invalid sloc>{{.}}[0m>{{.}}[0;1;36m __builtin_va_list{{.}}[0m {{.}}[0;32m'__va_list_tag [1]'{{.}}[0m){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33m{{[a-zA-Z0-9\\\/]*}}ast-dump-color.cpp:6:1{{.}}[0m, {{.}}[0;33mcol:5{{.}}[0m>{{.}}[0;1;36m Test{{.}}[0m {{.}}[0;32m'int'{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;34mUnusedAttr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:25{{.}}[0m>){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;33mFullComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:4:4{{.}}[0m, {{.}}[0;33mline:5:8{{.}}[0m>{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;33mParagraphComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:4:4{{.}}[0m, {{.}}[0;33mline:5:8{{.}}[0m>{{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:4:4{{.}}[0m> Text=" "){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mHTMLStartTagComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:5{{.}}[0m, {{.}}[0;33mcol:7{{.}}[0m> Name="a"){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:8{{.}}[0m, {{.}}[0;33mcol:12{{.}}[0m> Text="Hello"){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mHTMLEndTagComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:13{{.}}[0m, {{.}}[0;33mcol:16{{.}}[0m> Name="a"){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:5:4{{.}}[0m> Text=" "){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mHTMLStartTagComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:5{{.}}[0m, {{.}}[0;33mcol:8{{.}}[0m> Name="br" SelfClosing)))){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mFunctionDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:9:1{{.}}[0m, {{.}}[0;33mline:16:1{{.}}[0m>{{.}}[0;1;36m TestAttributedStmt{{.}}[0m {{.}}[0;32m'void (void)'{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;35mCompoundStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:9:27{{.}}[0m, {{.}}[0;33mline:16:1{{.}}[0m>{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;35mSwitchStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:10:3{{.}}[0m, {{.}}[0;33mline:15:3{{.}}[0m>{{$}}
+//CHECK: {{^}}        ({{.}}[0;34m<<<NULL>>>{{.}}[0m){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;35mIntegerLiteral{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:10:11{{.}}[0m> {{.}}[0;32m'int'{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;1;36m 1{{.}}[0m){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;35mCompoundStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:14{{.}}[0m, {{.}}[0;33mline:15:3{{.}}[0m>{{$}}
+//CHECK: {{^}}          ({{.}}[0;1;35mCaseStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:11:3{{.}}[0m, {{.}}[0;33mline:12:27{{.}}[0m>{{$}}
+//CHECK: {{^}}            ({{.}}[0;1;35mIntegerLiteral{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:11:8{{.}}[0m> {{.}}[0;32m'int'{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;1;36m 1{{.}}[0m){{$}}
+//CHECK: {{^}}            ({{.}}[0;34m<<<NULL>>>{{.}}[0m){{$}}
+//CHECK: {{^}}            ({{.}}[0;1;35mAttributedStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:12:5{{.}}[0m, {{.}}[0;33mcol:27{{.}}[0m>{{$}}
+//CHECK: {{^}}              ({{.}}[0;1;34mFallThroughAttr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:7{{.}}[0m, {{.}}[0;33mcol:14{{.}}[0m>){{$}}
+//CHECK: {{^}}              ({{.}}[0;1;35mNullStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:27{{.}}[0m>))){{$}}
+//CHECK: {{^}}          ({{.}}[0;1;35mCaseStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:13:3{{.}}[0m, {{.}}[0;33mline:14:5{{.}}[0m>{{$}}
+//CHECK: {{^}}            ({{.}}[0;1;35mIntegerLiteral{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:13:8{{.}}[0m> {{.}}[0;32m'int'{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;1;36m 2{{.}}[0m){{$}}
+//CHECK: {{^}}            ({{.}}[0;34m<<<NULL>>>{{.}}[0m){{$}}
+//CHECK: {{^}}            ({{.}}[0;1;35mNullStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:14:5{{.}}[0m>))))){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;33mFullComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:8:4{{.}}[0m, {{.}}[0;33mcol:11{{.}}[0m>{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;33mParagraphComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:4{{.}}[0m, {{.}}[0;33mcol:11{{.}}[0m>{{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:4{{.}}[0m, {{.}}[0;33mcol:11{{.}}[0m> Text=" Comment")))){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mCXXRecordDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:18:1{{.}}[0m, {{.}}[0;33mline:25:1{{.}}[0m> class{{.}}[0;1;36m Mutex{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;34mLockableAttr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:18:22{{.}}[0m>){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mCXXRecordDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:1{{.}}[0m, {{.}}[0;33mcol:33{{.}}[0m> class{{.}}[0;1;36m Mutex{{.}}[0m){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mFieldDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:20:3{{.}}[0m, {{.}}[0;33mcol:7{{.}}[0m>{{.}}[0;1;36m var1{{.}}[0m {{.}}[0;32m'int'{{.}}[0m{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;33mFullComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:19:6{{.}}[0m, {{.}}[0;33mcol:16{{.}}[0m>{{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mParagraphComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:6{{.}}[0m, {{.}}[0;33mcol:16{{.}}[0m>{{$}}
+//CHECK: {{^}}          ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:6{{.}}[0m, {{.}}[0;33mcol:16{{.}}[0m> Text=" A variable")))){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mFieldDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:24:3{{.}}[0m, {{.}}[0;33mcol:7{{.}}[0m>{{.}}[0;1;36m var2{{.}}[0m {{.}}[0;32m'int'{{.}}[0m{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;33mFullComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:21:6{{.}}[0m, {{.}}[0;33mline:23:44{{.}}[0m>{{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mParagraphComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:21:6{{.}}[0m, {{.}}[0;33mcol:22{{.}}[0m>{{$}}
+//CHECK: {{^}}          ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:6{{.}}[0m, {{.}}[0;33mcol:22{{.}}[0m> Text=" Another variable")){{$}}
+//CHECK: {{^}}        ({{.}}[0;1;33mParagraphComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:23:6{{.}}[0m, {{.}}[0;33mcol:44{{.}}[0m>{{$}}
+//CHECK: {{^}}          ({{.}}[0;1;33mTextComment{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:6{{.}}[0m, {{.}}[0;33mcol:44{{.}}[0m> Text=" Like the other variable, but different")))){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mCXXConstructorDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:18:33{{.}}[0m>{{.}}[0;1;36m Mutex{{.}}[0m {{.}}[0;32m'void (void)'{{.}}[0m inline{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;35mCompoundStmt{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:33{{.}}[0m>)){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mCXXConstructorDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:33{{.}}[0m>{{.}}[0;1;36m Mutex{{.}}[0m {{.}}[0;32m'void (const class Mutex &)'{{.}}[0m inline{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;32mParmVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:33{{.}}[0m> {{.}}[0;32m'const class Mutex &'{{.}}[0m)){{$}}
+//CHECK: {{^}}    ({{.}}[0;1;32mCXXConstructorDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:33{{.}}[0m>{{.}}[0;1;36m Mutex{{.}}[0m {{.}}[0;32m'void (class Mutex &&)'{{.}}[0m inline{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;32mParmVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:33{{.}}[0m> {{.}}[0;32m'class Mutex &&'{{.}}[0m))){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:1{{.}}[0m, {{.}}[0;33mline:25:3{{.}}[0m>{{.}}[0;1;36m mu1{{.}}[0m {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;35mCXXConstructExpr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:3{{.}}[0m> {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;36m{{.}}[0m {{.}}[0;32m'void (void)'{{.}}[0m)){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:18:1{{.}}[0m, {{.}}[0;33mline:25:8{{.}}[0m>{{.}}[0;1;36m mu2{{.}}[0m {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;35mCXXConstructExpr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:8{{.}}[0m> {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m{{.}}[0;36m{{.}}[0m{{.}}[0;36m{{.}}[0m {{.}}[0;32m'void (void)'{{.}}[0m)){{$}}
+//CHECK: {{^}}  ({{.}}[0;1;32mVarDecl{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mline:26:1{{.}}[0m, {{.}}[0;33mcol:5{{.}}[0m>{{.}}[0;1;36m TestExpr{{.}}[0m {{.}}[0;32m'int'{{.}}[0m{{$}}
+//CHECK: {{^}}    ({{.}}[0;1;34mGuardedByAttr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:29{{.}}[0m>{{$}}
+//CHECK: {{^}}      ({{.}}[0;1;35mDeclRefExpr{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m <{{.}}[0;33mcol:40{{.}}[0m> {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m{{.}}[0;36m lvalue{{.}}[0m{{.}}[0;36m{{.}}[0m {{.}}[0;1;32mVar{{.}}[0m{{.}}[0;33m 0x{{[0-9a-fA-F]*}}{{.}}[0m{{.}}[0;1;36m 'mu1'{{.}}[0m {{.}}[0;32m'class Mutex':'class Mutex'{{.}}[0m)))){{$}}
+





More information about the cfe-commits mailing list