clang 20.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.
 
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

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

CheckLists - Compare expected to seen diagnostic lists and return the the difference between them.

Definition at line 948 of file VerifyDiagnosticConsumer.cpp.

References D, clang::SourceManager::getPresumedLineNumber(), IsFromSameFile(), Label, PrintExpected(), and PrintUnexpected().

Referenced by CheckResults().

◆ 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.

References clang::Token::getLocation(), clang::Lexer::getSpelling(), clang::VerifyDiagnosticConsumer::HasNoDirectives, clang::Token::is(), clang::FileID::isInvalid(), clang::Token::isNot(), clang::Lexer::LexFromRawLexer(), ParseDirective(), clang::Lexer::SetCommentRetentionState(), clang::Token::setKind(), and SM.

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

◆ 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 D, 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