Create PathDiagnosticPiece subclasses PathDiagnosticEventPiece and
PathDiagnosticControlFlowPiece to distinguish (in the class hierarchy) between
events and control-flow diagnostic pieces. Clients must now use these directly
when constructing PathDiagnosticPieces.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66310 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp
index 88887b1..12e50d3 100644
--- a/lib/Analysis/BugReporter.cpp
+++ b/lib/Analysis/BugReporter.cpp
@@ -135,7 +135,7 @@
     return NULL;
   
   FullSourceLoc L(S->getLocStart(), BR.getContext().getSourceManager());
-  PathDiagnosticPiece* P = new PathDiagnosticPiece(L, getDescription());
+  PathDiagnosticPiece* P = new PathDiagnosticEventPiece(L, getDescription());
   
   const SourceRange *Beg, *End;
   getRanges(BR, Beg, End);  
@@ -481,7 +481,7 @@
       std::string msg = "'" + std::string(VD->getNameAsString()) +
       "' now aliases '" + MostRecent->getNameAsString() + "'";
       
-      PD.push_front(new PathDiagnosticPiece(L, msg));
+      PD.push_front(new PathDiagnosticEventPiece(L, msg));
     }
     
     return true;
@@ -643,8 +643,7 @@
           os << "Control jumps to line "
              << SMgr.getInstantiationLineNumber(S->getLocStart()) << ".\n";
           
-          PD.push_front(new PathDiagnosticPiece(L, os.str(), 
-                                             PathDiagnosticPiece::ControlFlow));
+          PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           break;
         }
           
@@ -712,8 +711,7 @@
             ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl());
           }
           
-          PD.push_front(new PathDiagnosticPiece(L, os.str(),
-                                             PathDiagnosticPiece::ControlFlow));
+          PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           break;
         }
           
@@ -722,8 +720,7 @@
           std::string sbuf;
           llvm::raw_string_ostream os(sbuf);
           ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl());
-          PD.push_front(new PathDiagnosticPiece(L, os.str(),
-                                            PathDiagnosticPiece::ControlFlow));
+          PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           break;
         }
 
@@ -737,8 +734,7 @@
           else
             os << "true.";
           
-          PD.push_front(new PathDiagnosticPiece(L, os.str(),
-                                            PathDiagnosticPiece::ControlFlow));          
+          PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           break;
         }
           
@@ -751,13 +747,11 @@
             os << "Loop condition is true. ";
             ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl());
             
-            PD.push_front(new PathDiagnosticPiece(L, os.str(),
-                                             PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           }
           else
-            PD.push_front(new PathDiagnosticPiece(L,
-                              "Loop condition is false.  Exiting loop.",
-                              PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L,
+                                    "Loop condition is false.  Exiting loop."));
           
           break;
         }
@@ -772,24 +766,22 @@
             os << "Loop condition is false. ";
             ExecutionContinues(os, SMgr, N, getStateManager().getCodeDecl());
 
-            PD.push_front(new PathDiagnosticPiece(L, os.str(),
-                                             PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L, os.str()));
           }
           else
-            PD.push_front(new PathDiagnosticPiece(L,
-                            "Loop condition is true.  Entering loop body.",
-                            PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L,
+                                                             "Loop condition is true.  Entering loop body."));
           
           break;
         }
           
         case Stmt::IfStmtClass: {          
           if (*(Src->succ_begin()+1) == Dst)
-            PD.push_front(new PathDiagnosticPiece(L, "Taking false branch.",
-                            PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L,
+                                                       "Taking false branch."));
           else  
-            PD.push_front(new PathDiagnosticPiece(L, "Taking true branch.",
-                            PathDiagnosticPiece::ControlFlow));
+            PD.push_front(new PathDiagnosticControlFlowPiece(L,
+                                                       "Taking true branch."));
           
           break;
         }
@@ -872,7 +864,9 @@
     return;
   
   if (D->empty()) { 
-    PathDiagnosticPiece* piece = new PathDiagnosticPiece(L, R.getDescription());
+    PathDiagnosticPiece* piece =
+      new PathDiagnosticEventPiece(L, R.getDescription());
+
     for ( ; Beg != End; ++Beg) piece->addRange(*Beg);
     D->push_back(piece);
   }