#include #include #include #include #include ">

clang: lib/Lex/LiteralSupport.cpp File Reference (original) (raw)

#include "[clang/Lex/LiteralSupport.h](LiteralSupport%5F8h%5Fsource.html)"
#include "[clang/Basic/CharInfo.h](CharInfo%5F8h%5Fsource.html)"
#include "[clang/Basic/LangOptions.h](LangOptions%5F8h%5Fsource.html)"
#include "[clang/Basic/SourceLocation.h](SourceLocation%5F8h%5Fsource.html)"
#include "[clang/Basic/TargetInfo.h](include%5F2clang%5F2Basic%5F2TargetInfo%5F8h%5Fsource.html)"
#include "[clang/Lex/LexDiagnostic.h](LexDiagnostic%5F8h%5Fsource.html)"
#include "[clang/Lex/Lexer.h](Lexer%5F8h%5Fsource.html)"
#include "[clang/Lex/Preprocessor.h](Preprocessor%5F8h%5Fsource.html)"
#include "[clang/Lex/Token.h](Token%5F8h%5Fsource.html)"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Unicode.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <string>

Functions

static unsigned

getCharWidth (tok::TokenKind kind, const TargetInfo &Target)

static unsigned

getEncodingPrefixLen (tok::TokenKind kind)

static CharSourceRange

MakeCharSourceRange (const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd)

static DiagnosticBuilder

Diag (DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)

Produce a diagnostic highlighting some portion of a literal.

static bool

IsEscapeValidInUnevaluatedStringLiteral (char Escape)

static unsigned

ProcessCharEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod)

ProcessCharEscape - Parse a standard C escape sequence, which can occur in either a character or a string literal.

static void

appendCodePoint (unsigned Codepoint, llvm::SmallVectorImpl< char > &Str)

static bool

ProcessNumericUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal=false)

static void

DiagnoseInvalidUnicodeCharacterName (DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name)

static bool

ProcessNamedUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features)

static bool

ProcessUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal=false)

ProcessUCNEscape - Read the Universal Character Name, check constraints and return the UTF32.

static int

MeasureUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, unsigned CharByteWidth, const LangOptions &Features, bool &HadError)

MeasureUCNEscape - Determine the number of bytes within the resulting string which this UCN will occupy.

static void

EncodeUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, char *&ResultBuf, bool &HadError, FullSourceLoc Loc, unsigned CharByteWidth, DiagnosticsEngine *Diags, const LangOptions &Features)

EncodeUCNEscape - Read the Universal Character Name, check constraints and convert the UTF32 to UTF8 or UTF16.

static bool

alwaysFitsInto64Bits (unsigned Radix, unsigned NumDigits)

static bool

IsExponentPart (char c, bool isHex)

static const char *

resyncUTF8 (const char *Err, const char *End)

Produce a diagnostic highlighting some portion of a literal.

Emits the diagnostic DiagID, highlighting the range of characters from TokRangeBegin (inclusive) to TokRangeEnd (exclusive), which must be a substring of a spelling buffer for the token beginning at TokBegin.

Definition at line 100 of file LiteralSupport.cpp.

References clang::Lexer::AdvanceToTokenCharacter(), clang::FullSourceLoc::getManager(), MakeCharSourceRange(), and clang::DiagnosticsEngine::Report().

Referenced by clang::Sema::ActOnAliasDeclaration(), clang::Sema::ActOnBaseSpecifier(), clang::Sema::ActOnConversionDeclarator(), clang::Sema::ActOnCXXConditionDeclaration(), clang::Sema::ActOnCXXMemberDeclarator(), clang::Sema::ActOnDecompositionDeclarator(), clang::Sema::ActOnDesignatedInitializer(), clang::Sema::ActOnExceptionDeclarator(), clang::Sema::ActOnFinishCXXMemberSpecification(), clang::Sema::ActOnFriendFunctionDecl(), clang::Sema::ActOnFriendTypeDecl(), clang::Sema::ActOnMemInitializers(), clang::Sema::ActOnNamespaceAliasDef(), clang::SemaOpenMP::ActOnOpenMPAllocateDirective(), clang::SemaOpenMP::ActOnOpenMPAssumesDirective(), clang::SemaOpenMP::ActOnOpenMPDeclareSimdDirective(), clang::SemaOpenMP::ActOnOpenMPExecutableDirective(), clang::SemaOpenMP::ActOnOpenMPGroupPrivateDirective(), clang::SemaOpenMP::ActOnOpenMPIdExpression(), clang::SemaOpenMP::ActOnOpenMPRegionEnd(), clang::SemaOpenMP::ActOnOpenMPRequiresDirective(), clang::Sema::ActOnParamDefaultArgument(), clang::Sema::ActOnPureSpecifier(), clang::Sema::ActOnStartLinkageSpecification(), clang::Sema::ActOnStartNamespaceDef(), clang::Sema::ActOnTemplatedFriendTag(), clang::Sema::ActOnUsingDeclaration(), clang::Sema::ActOnUsingDirective(), clang::Sema::ActOnUsingEnumDeclaration(), addConstraintSatisfaction(), AddInitializerToDiag(), clang::interp::State::addNotes(), clang::Sema::AttachBaseSpecifiers(), clang::sema::BlockScopeInfo::BlockScopeInfo(), clang::Sema::BuildBaseInitializer(), clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildCXXMemberCallExpr(), clang::Sema::BuildDelegatingInitializer(), clang::Sema::BuildExceptionDeclaration(), clang::Sema::BuildMemInitializer(), clang::Sema::BuildOverloadedArrowExpr(), clang::Sema::BuildStaticAssertDeclaration(), clang::Sema::BuildStdInitializerList(), clang::Sema::BuildUsingDeclaration(), clang::Sema::BuildUsingEnumDeclaration(), clang::sema::CapturedRegionScopeInfo::CapturedRegionScopeInfo(), clang::sema::CapturingScopeInfo::CapturingScopeInfo(), clang::interp::State::CCEDiag(), checkAttributeNumArgsImpl(), clang::checkAttrMutualExclusion(), checkAVXParam(), checkAVXParamFeature(), clang::Sema::CheckBaseSpecifier(), clang::SemaRISCV::CheckBuiltinFunctionCall(), clang::Sema::checkClassLevelDLLAttribute(), clang::SemaOpenACC::CheckCollapseLoopCount(), clang::Sema::CheckComparisonCategoryType(), clang::Sema::CheckCompletedCXXClass(), clang::Sema::CheckCompleteDecompositionDeclaration(), clang::Sema::CheckConstexprFunctionDefinition(), clang::Sema::CheckConstructor(), clang::Sema::CheckConstructorDeclarator(), clang::Sema::CheckConversionDeclarator(), CheckCXX98CompatAccessibleCopy(), clang::Sema::CheckCXXDefaultArguments(), clang::SemaOpenACC::CheckDeclareClause(), clang::Sema::CheckDeductionGuideDeclarator(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckDestructor(), clang::Sema::CheckDestructorDeclarator(), clang::Sema::CheckExplicitlyDefaultedComparison(), clang::Sema::CheckExplicitlyDefaultedSpecialMember(), clang::Sema::CheckExplicitObjectMemberFunction(), clang::Sema::CheckExplicitObjectOverride(), clang::Sema::CheckExtraCXXDefaultArguments(), clang::SemaOpenACC::CheckGangClause(), clang::Sema::CheckIfOverriddenFunctionIsMarkedFinal(), clang::Sema::checkIllFormedTrivialABIStruct(), clang::Sema::CheckImmediateEscalatingFunctionDefinition(), clang::SemaPseudoObject::checkIncDec(), clang::Sema::checkIncorrectVTablePointerAuthenticationAttribute(), clang::Sema::CheckInheritingConstructorUsingDecl(), checkIntToPointerCast(), clang::SemaOpenACC::CheckLinkClauseVarList(), clang::Sema::CheckLiteralOperatorDeclaration(), clang::SemaRISCV::CheckLMUL(), clang::Sema::CheckMemberPointerConversion(), checkMoreSpecializedThanPrimary(), checkNewAttributesAfterDef(), checkNumExprsInClause(), checkObjCPointerIntrospection(), clang::SemaOpenMP::CheckOMPGroupPrivateDecl(), clang::SemaOpenMP::CheckOMPRequiresDecl(), clang::SemaOpenMP::CheckOMPThreadPrivateDecl(), clang::Sema::CheckOverloadedOperatorDeclaration(), clang::Sema::CheckOverrideControl(), clang::Sema::CheckOverridingFunctionAttributes(), clang::Sema::CheckOverridingFunctionReturnType(), clang::Sema::CheckPointerConversion(), clang::Sema::CheckPureMethod(), clang::SemaOpenACC::CheckReductionClause(), clang::SemaOpenACC::CheckReductionVar(), clang::SemaOpenACC::CheckReductionVarType(), clang::SemaRISCV::checkRVVTypeSupport(), clang::SemaRISCV::checkTargetClonesAttr(), clang::SemaRISCV::checkTargetVersionAttr(), CheckTautologicalComparison(), CheckTemplateSpecializationScope(), clang::SemaOpenACC::CheckTileSizeExpr(), clang::Sema::CheckUsingDeclQualifier(), clang::Sema::CheckUsingDeclRedeclaration(), clang::Sema::CheckUsingShadowDecl(), clang_getDiagnosticOption(), clang::ASTUnit::CodeComplete(), collectModuleHeaderIncludes(), clang::computeDependence(), ComputeSelectedDestructor(), clang::Sema::CreateOverloadedBinOp(), createThreadFlows(), clang::Sema::DefineImplicitCopyAssignment(), clang::Sema::DefineImplicitLambdaToBlockPointerConversion(), clang::Sema::DefineImplicitMoveAssignment(), clang::Sema::DefineUsedVTables(), clang::DeductionFailureInfo::Destroy(), clang::Sema::DiagnoseAbsenceOfOverrideControl(), clang::Sema::DiagnoseAbstractType(), clang::Sema::diagnoseConflictingFunctionEffect(), clang::Sema::diagnoseEquivalentInternalLinkageDeclarations(), clang::Sema::diagnoseFunctionEffectMergeConflicts(), clang::Sema::DiagnoseHiddenVirtualMethods(), clang::Sema::DiagnoseImmediateEscalatingReason(), diagnoseInstanceReference(), DiagnoseInvalidUnicodeCharacterName(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), DiagnoseSelfAssignment(), clang::Sema::DiagnoseStaticAssertDetails(), diagnoseUnsatisfiedConstraintExpr(), clang::Sema::DiagPlaceholderVariableDefinition(), clang::Sema::DiagRedefinedPlaceholderFieldDecl(), clang::installapi::DylibVerifier::DylibVerifier(), clang::SARIFDiagnostic::emitDiagnosticMessage(), emitNullabilityConsistencyWarning(), clang::DiagnosticRenderer::emitStoredDiagnostic(), clang::SemaOpenMP::EndOpenMPDSABlock(), clang::Sema::EvaluateConvertedConstantExpression(), EvaluateFeatureLikeBuiltinMacro(), clang::Expr::EvaluateKnownConstIntCheckOverflow(), clang::interp::State::FFDiag(), clang::interp::State::FFDiag(), clang::SemaOpenMP::finalizeOpenMPDelayedAnalysis(), clang::Sema::FinalizeVarWithDestructor(), fixItNullability(), clang::TextDiagnosticBuffer::FlushDiagnostics(), clang::Diagnostic::FormatDiagnostic(), clang::sema::FunctionScopeInfo::FunctionScopeInfo(), clang::SrcMgr::ContentCache::getBufferOrNone(), clang::DiagnosticIDs::getCustomDiagID(), GetFullTypeForDeclarator(), clang::SourceMgrAdapter::handleDiag(), clang::SemaRISCV::handleInterruptAttr(), clang::Sema::HandleMSProperty(), clang::DiagnosticIDs::initCustomDiagMapping(), clang::Sema::InstantiateInClassInitializer(), clang::interp::interp__builtin_is_within_lifetime(), clang::DiagnosticIDs::IsCustomDiag(), IsStructurallyEquivalent(), clang::sema::LambdaScopeInfo::LambdaScopeInfo(), clang::MakeDeductionFailureInfo(), clang::Sema::MergeCXXFunctionDecl(), clang::Sema::NoteHiddenVirtualMethods(), clang::Sema::NoteOverloadCandidate(), clang::SrcMgr::ContentCache::operator=(), clang::Rewriter::overwriteChangedFiles(), clang::Sema::PerformContextuallyConvertToBool(), clang::Sema::PerformImplicitObjectArgumentInitialization(), printDiagnostic(), ProcessCharEscape(), ProcessNamedUCNEscape(), ProcessNumericUCNEscape(), ProcessUCNEscape(), clang::Sema::propagateDLLAttrToBaseClassTemplate(), rejectConstNotMutableType(), clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(), clang::Sema::ResolveSingleFunctionTemplateSpecialization(), clang::runWithSufficientStackSpace(), clang::runWithSufficientStackSpaceSlow(), clang::Scope::Scope(), SelectPropertyForSynthesisFromProtocols(), clang::Sema::SetCtorInitializers(), clang::Sema::SetDeclDefaulted(), clang::Sema::SetDeclDeleted(), clang::DiagnosticsEngine::setDiagnosticGroupErrorAsFatal(), clang::DiagnosticsEngine::setDiagnosticGroupWarningAsError(), clang::DiagnosticsEngine::setSeverity(), clang::DiagnosticsEngine::setSeverityForAll(), clang::DiagnosticsEngine::setSeverityForGroup(), clang::Sema::ShouldDeleteSpecialMember(), clang::Sema::SpecialMemberIsTrivial(), clang::StreamingDiagnostic::StreamingDiagnostic(), clang::StreamingDiagnostic::StreamingDiagnostic(), TryReinterpretCast(), and clang::ento::PathDiagnosticConsumer::~PathDiagnosticConsumer().