LLVM 22.0.0git
FileCheck.cpp File Reference
#include "llvm/FileCheck/FileCheck.h"
#include "FileCheckImpl.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/FormatVariadic.h"
#include <cstdint>
#include <list>
#include <set>
#include <tuple>
#include <utility>

Go to the source code of this file.

Classes

struct  PrefixMatcher

Functions

static unsigned nextAPIntBitWidth (unsigned BitWidth)
static APInt toSigned (APInt AbsVal, bool Negative)
static char popFront (StringRef &S)
static SMRange ProcessMatchResult (FileCheckDiag::MatchType MatchTy, const SourceMgr &SM, SMLoc Loc, Check::FileCheckType CheckTy, StringRef Buffer, size_t Pos, size_t Len, std::vector< FileCheckDiag > *Diags, bool AdjustPrevDiags=false)
static bool IsPartOfWord (char c)
static std::pair< Check::FileCheckType, StringRefFindCheckType (const FileCheckRequest &Req, StringRef Buffer, StringRef Prefix, bool &Misspelled)
static std::pair< Check::FileCheckType, StringRefFindCheckType (const FileCheckRequest &Req, StringRef Buffer, StringRef Prefix)
static size_t SkipWord (StringRef Str, size_t Loc)
static void addDefaultPrefixes (FileCheckRequest &Req)
static std::pair< StringRef, StringRefFindFirstMatchingPrefix (const FileCheckRequest &Req, PrefixMatcher &Matcher, StringRef &Buffer, unsigned &LineNumber, Check::FileCheckType &CheckTy)
 Searches the buffer for the first prefix in the prefix regular expression.
static Error printMatch (bool ExpectedMatch, const SourceMgr &SM, StringRef Prefix, SMLoc Loc, const Pattern &Pat, int MatchedCount, StringRef Buffer, Pattern::MatchResult MatchResult, const FileCheckRequest &Req, std::vector< FileCheckDiag > *Diags)
 Returns either (1) ErrorSuccess if there was no error or (2) ErrorReported if an error was reported, such as an unexpected match.
static Error printNoMatch (bool ExpectedMatch, const SourceMgr &SM, StringRef Prefix, SMLoc Loc, const Pattern &Pat, int MatchedCount, StringRef Buffer, Error MatchError, bool VerboseVerbose, std::vector< FileCheckDiag > *Diags)
 Returns either (1) ErrorSuccess if there was no error, or (2) ErrorReported if an error was reported, such as an expected match not found.
static Error reportMatchResult (bool ExpectedMatch, const SourceMgr &SM, StringRef Prefix, SMLoc Loc, const Pattern &Pat, int MatchedCount, StringRef Buffer, Pattern::MatchResult MatchResult, const FileCheckRequest &Req, std::vector< FileCheckDiag > *Diags)
 Returns either (1) ErrorSuccess if there was no error, or (2) ErrorReported if an error was reported.
static unsigned CountNumNewlinesBetween (StringRef Range, const char *&FirstNewLine)
 Counts the number of newlines in the specified range.
static bool ValidatePrefixes (StringRef Kind, StringSet<> &UniquePrefixes, ArrayRef< StringRef > SuppliedPrefixes)

Variables

constexpr StringLiteral SpaceChars = " \t"
static const charDefaultCheckPrefixes [] = {"CHECK"}
static const charDefaultCommentPrefixes [] = {"COM", "RUN"}

Function Documentation

◆ addDefaultPrefixes()

◆ CountNumNewlinesBetween()

unsigned CountNumNewlinesBetween ( StringRef Range,
const char *& FirstNewLine )
static

Counts the number of newlines in the specified range.

Definition at line 2195 of file FileCheck.cpp.

References Range.

Referenced by llvm::FileCheckString::CheckNext(), and llvm::FileCheckString::CheckSame().

◆ FindCheckType() [1/2]

std::pair< Check::FileCheckType, StringRef > FindCheckType ( const FileCheckRequest & Req,
StringRef Buffer,
StringRef Prefix )
static

◆ FindCheckType() [2/2]

◆ FindFirstMatchingPrefix()

std::pair< StringRef, StringRef > FindFirstMatchingPrefix ( const FileCheckRequest & Req,
PrefixMatcher & Matcher,
StringRef & Buffer,
unsigned & LineNumber,
Check::FileCheckType & CheckTy )
static

Searches the buffer for the first prefix in the prefix regular expression.

This searches the buffer using the provided regular expression, however it enforces constraints beyond that: 1) The found prefix must not be a suffix of something that looks like a valid prefix. 2) The found prefix must be followed by a valid check type suffix using FindCheckType above.

Returns
a pair of StringRefs into the Buffer, which combines:
  • the first match of the regular expression to satisfy these two is returned, otherwise an empty StringRef is returned to indicate failure.
  • buffer rewound to the location right after parsed suffix, for parsing to continue from

If this routine returns a valid prefix, it will also shrink Buffer to start at the beginning of the returned prefix, increment LineNumber for each new line consumed from Buffer, and set CheckTy to the type of check found by examining the suffix.

If no valid prefix is found, the state of Buffer, LineNumber, and CheckTy is unspecified.

Definition at line 1769 of file FileCheck.cpp.

References assert(), llvm::StringRef::back(), llvm::Check::CheckNone, llvm::StringRef::count(), llvm::StringRef::data(), llvm::StringRef::drop_front(), llvm::StringRef::empty(), FindCheckType(), IsPartOfWord(), PrefixMatcher::match(), llvm::StringRef::size(), SkipWord(), and llvm::StringRef::substr().

Referenced by llvm::FileCheck::readCheckFile().

◆ IsPartOfWord()

bool IsPartOfWord ( char c)
static

Definition at line 1524 of file FileCheck.cpp.

References llvm::isAlnum().

Referenced by FindFirstMatchingPrefix(), and SkipWord().

◆ nextAPIntBitWidth()

unsigned nextAPIntBitWidth ( unsigned BitWidth)
static

Definition at line 122 of file FileCheck.cpp.

References llvm::APInt::APINT_BITS_PER_WORD, and llvm::BitWidth.

Referenced by llvm::BinaryOperation::eval(), and toSigned().

◆ popFront()

◆ printMatch()

◆ printNoMatch()

◆ ProcessMatchResult()

SMRange ProcessMatchResult ( FileCheckDiag::MatchType MatchTy,
const SourceMgr & SM,
SMLoc Loc,
Check::FileCheckType CheckTy,
StringRef Buffer,
size_t Pos,
size_t Len,
std::vector< FileCheckDiag > * Diags,
bool AdjustPrevDiags = false )
static

◆ reportMatchResult()

Error reportMatchResult ( bool ExpectedMatch,
const SourceMgr & SM,
StringRef Prefix,
SMLoc Loc,
const Pattern & Pat,
int MatchedCount,
StringRef Buffer,
Pattern::MatchResult MatchResult,
const FileCheckRequest & Req,
std::vector< FileCheckDiag > * Diags )
static

◆ SkipWord()

size_t SkipWord ( StringRef Str,
size_t Loc )
static

Definition at line 1687 of file FileCheck.cpp.

References IsPartOfWord().

Referenced by FindFirstMatchingPrefix().

◆ toSigned()

APInt toSigned ( APInt AbsVal,
bool Negative )
static

◆ ValidatePrefixes()

bool ValidatePrefixes ( StringRef Kind,
StringSet<> & UniquePrefixes,
ArrayRef< StringRef > SuppliedPrefixes )
static

Variable Documentation

◆ DefaultCheckPrefixes

const char* DefaultCheckPrefixes[] = {"CHECK"}
static

Definition at line 1693 of file FileCheck.cpp.

Referenced by addDefaultPrefixes(), and llvm::FileCheck::ValidateCheckPrefixes().

◆ DefaultCommentPrefixes

const char* DefaultCommentPrefixes[] = {"COM", "RUN"}
static

Definition at line 1694 of file FileCheck.cpp.

Referenced by addDefaultPrefixes(), and llvm::FileCheck::ValidateCheckPrefixes().

◆ SpaceChars

StringLiteral SpaceChars = " \t"
constexpr

Definition at line 361 of file FileCheck.cpp.

Referenced by llvm::Pattern::parseNumericSubstitutionBlock().