clang  19.0.0git
Classes | Typedefs | Functions
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/FileManager.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::DirectiveStatus &Status, VerifyDiagnosticConsumer::MarkerTracker &Markers)
 ParseDirective - Go through the comment and see if it indicates expected diagnostics. More...
 
static bool findDirectives (SourceManager &SM, FileID FID, const LangOptions &LangOpts)
 Lex the specified source file to determine whether it contains any expected-* directives. More...
 
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. More...
 
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. More...
 
static bool IsFromSameFile (SourceManager &SM, SourceLocation DirectiveLoc, SourceLocation DiagnosticLoc)
 Determine whether two source locations come from the same file. More...
 
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. More...
 
static unsigned CheckResults (DiagnosticsEngine &Diags, SourceManager &SourceMgr, const TextDiagnosticBuffer &Buffer, ExpectedData &ED)
 CheckResults - This compares the expected results to those that were actually reported. More...
 

Typedef Documentation

◆ const_diag_iterator

Definition at line 84 of file VerifyDiagnosticConsumer.cpp.

◆ DiagList

Definition at line 83 of file VerifyDiagnosticConsumer.cpp.

◆ Directive

Definition at line 49 of file VerifyDiagnosticConsumer.cpp.

◆ DirectiveList

Definition at line 50 of file VerifyDiagnosticConsumer.cpp.

◆ ExpectedData

Definition at line 51 of file VerifyDiagnosticConsumer.cpp.

Function Documentation

◆ CheckLists()

static unsigned CheckLists ( DiagnosticsEngine Diags,
SourceManager SourceMgr,
const char *  Label,
DirectiveList Left,
const_diag_iterator  d2_begin,
const_diag_iterator  d2_end,
bool  IgnoreUnexpected 
)
static

◆ CheckResults()

static unsigned CheckResults ( DiagnosticsEngine Diags,
SourceManager SourceMgr,
const TextDiagnosticBuffer Buffer,
ExpectedData ED 
)
static

◆ DetailedErrorString()

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

◆ findDirectives()

static 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 831 of file VerifyDiagnosticConsumer.cpp.

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

◆ IsFromSameFile()

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

Determine whether two source locations come from the same file.

Definition at line 931 of file VerifyDiagnosticConsumer.cpp.

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

Referenced by CheckLists().

◆ ParseDirective()

static bool ParseDirective ( StringRef  S,
ExpectedData ED,
SourceManager SM,
Preprocessor PP,
SourceLocation  Pos,
VerifyDiagnosticConsumer::DirectiveStatus Status,
VerifyDiagnosticConsumer::MarkerTracker Markers 
)
static

ParseDirective - Go through the comment and see if it indicates expected diagnostics.

If so, then put them in the appropriate directive list.

Returns true if any valid directives were found.

Definition at line 409 of file VerifyDiagnosticConsumer.cpp.

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

◆ PrintExpected()

static 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 899 of file VerifyDiagnosticConsumer.cpp.

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

Referenced by CheckLists().

◆ PrintUnexpected()

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