diff --git a/Driver/DiagChecker.cpp b/Driver/DiagChecker.cpp
index 660d17a..6f7ea0b 100644
--- a/Driver/DiagChecker.cpp
+++ b/Driver/DiagChecker.cpp
@@ -40,6 +40,7 @@
 
 static const char * const ExpectedErrStr = "expected-error";
 static const char * const ExpectedWarnStr = "expected-warning";
+static const char * const ExpectedNoteStr = "expected-note";
 
 /// FindDiagnostics - Go through the comment and see if it indicates expected
 /// diagnostics. If so, then put them in a diagnostic list.
@@ -86,7 +87,8 @@
 //   expected errors and warnings.
 static void FindExpectedDiags(Preprocessor &PP,
                               DiagList &ExpectedErrors,
-                              DiagList &ExpectedWarnings) {
+                              DiagList &ExpectedWarnings,
+                              DiagList &ExpectedNotes) {
   // Return comments as tokens, this is how we find expected diagnostics.
   PP.SetCommentRetentionState(true, true);
 
@@ -114,6 +116,10 @@
       // Find all expected warnings
       FindDiagnostics(Comment, ExpectedWarnings, PP.getSourceManager(),
                       Tok.getLocation(), ExpectedWarnStr);
+
+      // Find all expected notes
+      FindDiagnostics(Comment, ExpectedNotes, PP.getSourceManager(),
+                      Tok.getLocation(), ExpectedNoteStr);
     }
   } while (Tok.isNot(tok::eof));
 
@@ -182,7 +188,8 @@
 /// 
 static bool CheckResults(Preprocessor &PP,
                          const DiagList &ExpectedErrors,
-                         const DiagList &ExpectedWarnings) {
+                         const DiagList &ExpectedWarnings,
+                         const DiagList &ExpectedNotes) {
   const DiagnosticClient *DiagClient = PP.getDiagnostics().getClient();
   assert(DiagClient != 0 &&
       "DiagChecker requires a valid TextDiagnosticBuffer");
@@ -223,6 +230,20 @@
                                  ExpectedWarnings.end(),
                                  "Warnings seen but not expected:");
 
+  // See if there were notes that were expected but not seen.
+  HadProblem |= CompareDiagLists(SourceMgr,
+                                 ExpectedNotes.begin(),
+                                 ExpectedNotes.end(),
+                                 Diags.note_begin(), Diags.note_end(),
+                                 "Notes expected but not seen:");
+
+  // See if there were notes that were seen but not expected.
+  HadProblem |= CompareDiagLists(SourceMgr,
+                                 Diags.note_begin(), Diags.note_end(),
+                                 ExpectedNotes.begin(),
+                                 ExpectedNotes.end(),
+                                 "Notes seen but not expected:");
+
   return HadProblem;
 }
 
@@ -238,9 +259,9 @@
 /// CheckDiagnostics - Gather the expected diagnostics and check them.
 bool clang::CheckDiagnostics(Preprocessor &PP) {
   // Gather the set of expected diagnostics.
-  DiagList ExpectedErrors, ExpectedWarnings;
-  FindExpectedDiags(PP, ExpectedErrors, ExpectedWarnings);
+  DiagList ExpectedErrors, ExpectedWarnings, ExpectedNotes;
+  FindExpectedDiags(PP, ExpectedErrors, ExpectedWarnings, ExpectedNotes);
 
   // Check that the expected diagnostics occurred.
-  return CheckResults(PP, ExpectedErrors, ExpectedWarnings);
+  return CheckResults(PP, ExpectedErrors, ExpectedWarnings, ExpectedNotes);
 }
diff --git a/include/clang/Driver/TextDiagnosticBuffer.h b/include/clang/Driver/TextDiagnosticBuffer.h
index 76dfeaf..28f2287 100644
--- a/include/clang/Driver/TextDiagnosticBuffer.h
+++ b/include/clang/Driver/TextDiagnosticBuffer.h
@@ -28,7 +28,7 @@
   typedef DiagList::iterator iterator;
   typedef DiagList::const_iterator const_iterator;
 private:
-  DiagList Errors, Warnings;
+  DiagList Errors, Warnings, Notes;
 public:
   const_iterator err_begin() const  { return Errors.begin(); }
   const_iterator err_end() const    { return Errors.end(); }
@@ -36,6 +36,9 @@
   const_iterator warn_begin() const { return Warnings.begin(); }
   const_iterator warn_end() const   { return Warnings.end(); }
 
+  const_iterator note_begin() const { return Notes.begin(); }
+  const_iterator note_end() const   { return Notes.end(); }
+
   virtual void HandleDiagnostic(Diagnostic &Diags,
                                 Diagnostic::Level DiagLevel,
                                 FullSourceLoc Pos,
diff --git a/lib/Driver/TextDiagnosticBuffer.cpp b/lib/Driver/TextDiagnosticBuffer.cpp
index b3e21e1b..1df9375 100644
--- a/lib/Driver/TextDiagnosticBuffer.cpp
+++ b/lib/Driver/TextDiagnosticBuffer.cpp
@@ -26,6 +26,11 @@
                                             unsigned) {
   switch (Level) {
   default: assert(0 && "Diagnostic not handled during diagnostic buffering!");
+  case Diagnostic::Note:
+    Notes.push_back(std::make_pair(Pos.getLocation(),
+                                   FormatDiagnostic(Diags, Level, ID, 
+                                                    Strs, NumStrs)));
+    break;
   case Diagnostic::Warning:
     Warnings.push_back(std::make_pair(Pos.getLocation(),
                                       FormatDiagnostic(Diags, Level, ID, 
