clang 22.0.0git
VerifyDiagnosticConsumer.cpp File Reference
#include "clang/Frontend/VerifyDiagnosticConsumer.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TokenKinds.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/TextDiagnosticBuffer.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/PPCallbacks.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Lex/Token.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Regex.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstring>
#include <iterator>
#include <memory>
#include <string>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

class  clang::VerifyDiagnosticConsumer::MarkerTracker

Typedefs

using Directive = VerifyDiagnosticConsumer::Directive
using DirectiveList = VerifyDiagnosticConsumer::DirectiveList
using ExpectedData = VerifyDiagnosticConsumer::ExpectedData
using DiagList = TextDiagnosticBuffer::DiagList
using const_diag_iterator = TextDiagnosticBuffer::const_iterator

Functions

static std::string DetailedErrorString (const DiagnosticsEngine &Diags)
static bool ParseDirective (StringRef S, ExpectedData *ED, SourceManager &SM, Preprocessor *PP, SourceLocation Pos, VerifyDiagnosticConsumer::ParsingState &State, VerifyDiagnosticConsumer::MarkerTracker &Markers)
 ParseDirective - Go through the comment and see if it indicates expected diagnostics.
static bool findDirectives (SourceManager &SM, FileID FID, const LangOptions &LangOpts)
 Lex the specified source file to determine whether it contains any expected-* directives.
static unsigned PrintUnexpected (DiagnosticsEngine &Diags, SourceManager *SourceMgr, const_diag_iterator diag_begin, const_diag_iterator diag_end, const char *Kind)
 Takes a list of diagnostics that have been generated but not matched by an expected-* directive and produces a diagnostic to the user from this.
static unsigned PrintExpected (DiagnosticsEngine &Diags, SourceManager &SourceMgr, std::vector< Directive * > &DL, const char *Kind)
 Takes a list of diagnostics that were expected to have been generated but were not and produces a diagnostic to the user from this.
static bool IsFromSameFile (SourceManager &SM, SourceLocation DirectiveLoc, SourceLocation DiagnosticLoc)
 Determine whether two source locations come from the same file.
static unsigned CheckLists (DiagnosticsEngine &Diags, SourceManager &SourceMgr, const char *Label, DirectiveList &Left, const_diag_iterator d2_begin, const_diag_iterator d2_end, bool IgnoreUnexpected)
 CheckLists - Compare expected to seen diagnostic lists and return the the difference between them.
static unsigned CheckResults (DiagnosticsEngine &Diags, SourceManager &SourceMgr, const TextDiagnosticBuffer &Buffer, ExpectedData &ED)
 CheckResults - This compares the expected results to those that were actually reported.

Typedef Documentation

◆ const_diag_iterator

◆ DiagList

◆ Directive

◆ DirectiveList

◆ ExpectedData

Function Documentation

◆ CheckLists()

◆ CheckResults()

◆ DetailedErrorString()

std::string DetailedErrorString ( const DiagnosticsEngine & Diags)
static

◆ findDirectives()

bool findDirectives ( SourceManager & SM,
FileID FID,
const LangOptions & LangOpts )
static

Lex the specified source file to determine whether it contains any expected-* directives.

As a Lexer is used rather than a full-blown Preprocessor, directives inside skipped if blocks will still be found.

Returns
true if any directives were found.

Definition at line 839 of file VerifyDiagnosticConsumer.cpp.

References clang::Lexer::getSpelling(), clang::VerifyDiagnosticConsumer::HasNoDirectives, clang::FileID::isInvalid(), clang::Lexer::LexFromRawLexer(), ParseDirective(), clang::Lexer::SetCommentRetentionState(), SM, and Tok.

Referenced by clang::VerifyDiagnosticConsumer::UpdateParsedFileStatus().

◆ IsFromSameFile()

bool IsFromSameFile ( SourceManager & SM,
SourceLocation DirectiveLoc,
SourceLocation DiagnosticLoc )
static

Determine whether two source locations come from the same file.

Definition at line 944 of file VerifyDiagnosticConsumer.cpp.

References clang::SourceLocation::isMacroID(), and SM.

Referenced by CheckLists().

◆ ParseDirective()

◆ PrintExpected()

unsigned PrintExpected ( DiagnosticsEngine & Diags,
SourceManager & SourceMgr,
std::vector< Directive * > & DL,
const char * Kind )
static

Takes a list of diagnostics that were expected to have been generated but were not and produces a diagnostic to the user from this.

Definition at line 908 of file VerifyDiagnosticConsumer.cpp.

References clang::DiagnosticsEngine::getDiagnosticOptions(), clang::DiagnosticsEngine::Report(), clang::DiagnosticBuilder::setForceEmit(), and clang::DiagnosticOptions::VerifyPrefixes.

Referenced by CheckLists().

◆ PrintUnexpected()

unsigned PrintUnexpected ( DiagnosticsEngine & Diags,
SourceManager * SourceMgr,
const_diag_iterator diag_begin,
const_diag_iterator diag_end,
const char * Kind )
static

Takes a list of diagnostics that have been generated but not matched by an expected-* directive and produces a diagnostic to the user from this.

Definition at line 877 of file VerifyDiagnosticConsumer.cpp.

References clang::File, clang::DiagnosticsEngine::getDiagnosticOptions(), clang::DiagnosticsEngine::Report(), clang::DiagnosticBuilder::setForceEmit(), and clang::DiagnosticOptions::VerifyPrefixes.

Referenced by CheckLists().