;
39 const char*Start,
const char*&Beg,
const char*
E,
42FS.setPrecision(ParseNonPositionAmount(Beg,
E, *argIndex));
54 const char*FlagBeg,
const char*
E,
boolWarn) {
55StringRef Flag(FlagBeg,
E- FlagBeg);
58FS.setHasObjCTechnicalTerm(FlagBeg);
78 boolisFreeBSDKPrintf) {
84 const char*Start =
nullptr;
85UpdateOnReturn <const char*> UpdateBeg(Beg, I);
88 for( ; I !=
E; ++I) {
113 if(ParseArgPosition(H, FS, Start, I,
E))
125 unsigned charPrivacyFlags = 0;
126StringRef MatchedStr;
129StringRef Str(I,
E- I);
130std::string Match =
"^[[:space:]]*" 131 "(private|public|sensitive|mask\\.[^[:space:],}]*)" 132 "[[:space:]]*(,|})";
133llvm::Regex R(Match);
136 if(R.match(Str, &Matches)) {
137MatchedStr = Matches[1];
138I += Matches[0].size();
143 if(MatchedStr.starts_with(
"mask")) {
144StringRef MaskType = MatchedStr.substr(
sizeof(
"mask.") - 1);
145 unsignedSize = MaskType.size();
146 if(Warn && (Size == 0 || Size > 8))
148FS.setMaskType(MaskType);
149}
else if(MatchedStr ==
"sensitive")
151 else if(PrivacyFlags !=
153MatchedStr ==
"private")
155 else if(PrivacyFlags == 0 && MatchedStr ==
"public")
158 size_tCommaOrBracePos =
159Str.find_if([](
char c) {
return c==
','||
c==
'}'; });
161 if(CommaOrBracePos == StringRef::npos) {
168I += CommaOrBracePos + 1;
171}
while(*(I - 1) ==
',');
174 switch(PrivacyFlags) {
178FS.setIsPrivate(MatchedStr.data());
181FS.setIsPublic(MatchedStr.data());
184FS.setIsSensitive(MatchedStr.data());
187llvm_unreachable(
"Unexpected privacy flag value");
192 boolhasMore =
true;
193 for( ; I !=
E; ++I) {
195 default: hasMore =
false;
break;
198FS.setHasThousandsGrouping(I);
200 case '-': FS.setIsLeftJustified(I);
break;
201 case '+': FS.setHasPlusPrefix(I);
break;
202 case ' ': FS.setHasSpacePrefix(I);
break;
203 case '#': FS.setHasAlternativeForm(I);
break;
204 case '0': FS.setHasLeadingZeros(I);
break;
218 if(ParseFieldWidth(H, FS, Start, I,
E,
219FS.usesPositionalArg() ?
nullptr: &argIndex))
239FS.usesPositionalArg() ?
nullptr: &argIndex))
250 if(ParseVectorModifier(H, FS, I,
E, LO))
254 if(ParseLengthModifier(FS, I,
E, LO) && I ==
E) {
267 const char*ObjCModifierFlagsStart =
nullptr,
268*ObjCModifierFlagsEnd =
nullptr;
270ObjCModifierFlagsStart = I;
274ObjCModifierFlagsEnd = I;
300 const char*conversionPosition = I++;
302 switch(*conversionPosition) {
331 if(isFreeBSDKPrintf)
349 if(isFreeBSDKPrintf)
351 else if(LO.FixedPoint)
355 if(isFreeBSDKPrintf)
360 if(isFreeBSDKPrintf)
362 else if(
Target.getTriple().isOSDarwin())
366 if(
Target.getTriple().isOSDarwin())
370 if(
Target.getTriple().isOSDarwin())
375 if(
Target.getTriple().isOSMSVCRT())
398ObjCModifierFlagsStart) {
400ObjCModifierFlagsEnd + 1,
406FS.setConversionSpecifier(CS);
408FS.setArgIndex(argIndex++);
415 unsignedLen = I - Start;
416 if(ParseUTF8InvalidSpecifier(Start,
E, Len)) {
418FS.setConversionSpecifier(CS);
431 boolisFreeBSDKPrintf) {
433 unsignedargIndex = 0;
453assert(I ==
E&&
"Format string not exhausted");
462 unsignedargIndex = 0;
489 unsignedArgIndex = 0;
492 while(
Begin!= End) {
508 boolIsObjCLiteral)
const{
509 if(
CS.
getKind() == ConversionSpecifier::cArg)
550:
ArgType(Ctx.IntTy,
"__int32");
585:
ArgType(Ctx.UnsignedIntTy,
"unsigned __int32");
613 if(
CS.
getKind() == ConversionSpecifier::nArg) {
642llvm_unreachable(
"only used for OpenCL which doesn not handle nArg");
650 caseConversionSpecifier::sArg:
660 caseConversionSpecifier::SArg:
668 caseConversionSpecifier::CArg:
675 caseConversionSpecifier::pArg:
676 caseConversionSpecifier::PArg:
678 caseConversionSpecifier::ObjCObjArg:
680 caseConversionSpecifier::kArg:
691 caseConversionSpecifier::KArg:
702 caseConversionSpecifier::rArg:
713 caseConversionSpecifier::RArg:
734 boolIsObjCLiteral)
const{
740 ArgTypeScalarTy = getScalarArgType(Ctx, IsObjCLiteral);
750 if(
CS.
getKind() == ConversionSpecifier::nArg)
761 CS.
setKind(ConversionSpecifier::ObjCObjArg);
764HasThousandsGrouping =
false;
765HasPlusPrefix =
false;
766HasSpacePrefix =
false;
767HasAlternativeForm =
false;
768HasLeadingZeroes =
false;
777 CS.
setKind(ConversionSpecifier::sArg);
780HasAlternativeForm =
false;
781HasLeadingZeroes =
false;
794QT = ETy->getDecl()->getIntegerType();
812 caseBuiltinType::Bool:
813 caseBuiltinType::WChar_U:
814 caseBuiltinType::WChar_S:
815 caseBuiltinType::Char8:
816 caseBuiltinType::Char16:
817 caseBuiltinType::Char32:
818 caseBuiltinType::UInt128:
819 caseBuiltinType::Int128:
820 caseBuiltinType::Half:
821 caseBuiltinType::BFloat16:
822 caseBuiltinType::Float16:
823 caseBuiltinType::Float128:
824 caseBuiltinType::Ibm128:
825 caseBuiltinType::ShortAccum:
826 caseBuiltinType::Accum:
827 caseBuiltinType::LongAccum:
828 caseBuiltinType::UShortAccum:
829 caseBuiltinType::UAccum:
830 caseBuiltinType::ULongAccum:
831 caseBuiltinType::ShortFract:
832 caseBuiltinType::Fract:
833 caseBuiltinType::LongFract:
834 caseBuiltinType::UShortFract:
835 caseBuiltinType::UFract:
836 caseBuiltinType::ULongFract:
837 caseBuiltinType::SatShortAccum:
838 caseBuiltinType::SatAccum:
839 caseBuiltinType::SatLongAccum:
840 caseBuiltinType::SatUShortAccum:
841 caseBuiltinType::SatUAccum:
842 caseBuiltinType::SatULongAccum:
843 caseBuiltinType::SatShortFract:
844 caseBuiltinType::SatFract:
845 caseBuiltinType::SatLongFract:
846 caseBuiltinType::SatUShortFract:
847 caseBuiltinType::SatUFract:
848 caseBuiltinType::SatULongFract:
852#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \ 853 case BuiltinType::Id: 854#include "clang/Basic/OpenCLImageTypes.def" 855#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ 856 case BuiltinType::Id: 857#include "clang/Basic/OpenCLExtensionTypes.def" 858#define SVE_TYPE(Name, Id, SingletonId) \ 859 case BuiltinType::Id: 860#include "clang/Basic/AArch64SVEACLETypes.def" 861#define PPC_VECTOR_TYPE(Name, Id, Size) \ 862 case BuiltinType::Id: 863#include "clang/Basic/PPCTypes.def" 864#define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id: 865#include "clang/Basic/RISCVVTypes.def" 866#define WASM_TYPE(Name, Id, SingletonId) case BuiltinType::Id: 867#include "clang/Basic/WebAssemblyReferenceTypes.def" 868#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) case BuiltinType::Id: 869#include "clang/Basic/AMDGPUTypes.def" 870#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case BuiltinType::Id: 871#include "clang/Basic/HLSLIntangibleTypes.def" 872#define SIGNED_TYPE(Id, SingletonId) 873#define UNSIGNED_TYPE(Id, SingletonId) 874#define FLOATING_TYPE(Id, SingletonId) 875#define BUILTIN_TYPE(Id, SingletonId) \ 876 case BuiltinType::Id: 877#include "clang/AST/BuiltinTypes.def" 881 caseBuiltinType::UInt:
882 caseBuiltinType::Int:
883 caseBuiltinType::Float:
887 caseBuiltinType::Double:
891 caseBuiltinType::Char_U:
892 caseBuiltinType::UChar:
893 caseBuiltinType::Char_S:
894 caseBuiltinType::SChar:
898 caseBuiltinType::Short:
899 caseBuiltinType::UShort:
903 caseBuiltinType::Long:
904 caseBuiltinType::ULong:
908 caseBuiltinType::LongLong:
909 caseBuiltinType::ULongLong:
913 caseBuiltinType::LongDouble:
919 if(LangOpt.C99 || LangOpt.CPlusPlus11)
926 caseConversionSpecifier::uArg:
927 caseConversionSpecifier::UArg:
931 caseConversionSpecifier::dArg:
932 caseConversionSpecifier::DArg:
933 caseConversionSpecifier::iArg:
950 CS.
setKind(ConversionSpecifier::cArg);
953HasAlternativeForm =
false;
954HasLeadingZeroes =
false;
955HasPlusPrefix =
false;
959 CS.
setKind(ConversionSpecifier::fArg);
961 CS.
setKind(ConversionSpecifier::dArg);
962HasAlternativeForm =
false;
964 CS.
setKind(ConversionSpecifier::uArg);
965HasAlternativeForm =
false;
966HasPlusPrefix =
false;
968llvm_unreachable(
"Unexpected type");
985 if(IsLeftJustified) os <<
"-";
986 if(HasPlusPrefix) os <<
"+";
987 if(HasSpacePrefix) os <<
" ";
988 if(HasAlternativeForm) os <<
"#";
989 if(HasLeadingZeroes) os <<
"0";
1012 caseConversionSpecifier::dArg:
1013 caseConversionSpecifier::DArg:
1014 caseConversionSpecifier::iArg:
1015 caseConversionSpecifier::fArg:
1016 caseConversionSpecifier::FArg:
1017 caseConversionSpecifier::eArg:
1018 caseConversionSpecifier::EArg:
1019 caseConversionSpecifier::gArg:
1020 caseConversionSpecifier::GArg:
1021 caseConversionSpecifier::aArg:
1022 caseConversionSpecifier::AArg:
1023 caseConversionSpecifier::FreeBSDrArg:
1024 caseConversionSpecifier::FreeBSDyArg:
1025 caseConversionSpecifier::rArg:
1026 caseConversionSpecifier::kArg:
1035 if(!HasAlternativeForm)
1040 caseConversionSpecifier::bArg:
1041 caseConversionSpecifier::BArg:
1042 caseConversionSpecifier::oArg:
1043 caseConversionSpecifier::OArg:
1044 caseConversionSpecifier::xArg:
1045 caseConversionSpecifier::XArg:
1046 caseConversionSpecifier::aArg:
1047 caseConversionSpecifier::AArg:
1048 caseConversionSpecifier::eArg:
1049 caseConversionSpecifier::EArg:
1050 caseConversionSpecifier::fArg:
1051 caseConversionSpecifier::FArg:
1052 caseConversionSpecifier::gArg:
1053 caseConversionSpecifier::GArg:
1054 caseConversionSpecifier::FreeBSDrArg:
1055 caseConversionSpecifier::FreeBSDyArg:
1056 caseConversionSpecifier::rArg:
1057 caseConversionSpecifier::RArg:
1058 caseConversionSpecifier::kArg:
1059 caseConversionSpecifier::KArg:
1068 if(!HasLeadingZeroes)
1073 caseConversionSpecifier::bArg:
1074 caseConversionSpecifier::BArg:
1075 caseConversionSpecifier::dArg:
1076 caseConversionSpecifier::DArg:
1077 caseConversionSpecifier::iArg:
1078 caseConversionSpecifier::oArg:
1079 caseConversionSpecifier::OArg:
1080 caseConversionSpecifier::uArg:
1081 caseConversionSpecifier::UArg:
1082 caseConversionSpecifier::xArg:
1083 caseConversionSpecifier::XArg:
1084 caseConversionSpecifier::aArg:
1085 caseConversionSpecifier::AArg:
1086 caseConversionSpecifier::eArg:
1087 caseConversionSpecifier::EArg:
1088 caseConversionSpecifier::fArg:
1089 caseConversionSpecifier::FArg:
1090 caseConversionSpecifier::gArg:
1091 caseConversionSpecifier::GArg:
1092 caseConversionSpecifier::FreeBSDrArg:
1093 caseConversionSpecifier::FreeBSDyArg:
1094 caseConversionSpecifier::rArg:
1095 caseConversionSpecifier::RArg:
1096 caseConversionSpecifier::kArg:
1097 caseConversionSpecifier::KArg:
1106 if(!HasSpacePrefix)
1111 caseConversionSpecifier::dArg:
1112 caseConversionSpecifier::DArg:
1113 caseConversionSpecifier::iArg:
1114 caseConversionSpecifier::fArg:
1115 caseConversionSpecifier::FArg:
1116 caseConversionSpecifier::eArg:
1117 caseConversionSpecifier::EArg:
1118 caseConversionSpecifier::gArg:
1119 caseConversionSpecifier::GArg:
1120 caseConversionSpecifier::aArg:
1121 caseConversionSpecifier::AArg:
1122 caseConversionSpecifier::FreeBSDrArg:
1123 caseConversionSpecifier::FreeBSDyArg:
1124 caseConversionSpecifier::rArg:
1125 caseConversionSpecifier::kArg:
1134 if(!IsLeftJustified)
1139 caseConversionSpecifier::nArg:
1148 if(!HasThousandsGrouping)
1152 caseConversionSpecifier::dArg:
1153 caseConversionSpecifier::DArg:
1154 caseConversionSpecifier::iArg:
1155 caseConversionSpecifier::uArg:
1156 caseConversionSpecifier::UArg:
1157 caseConversionSpecifier::fArg:
1158 caseConversionSpecifier::FArg:
1159 caseConversionSpecifier::gArg:
1160 caseConversionSpecifier::GArg:
1173 caseConversionSpecifier::bArg:
1174 caseConversionSpecifier::BArg:
1175 caseConversionSpecifier::dArg:
1176 caseConversionSpecifier::DArg:
1177 caseConversionSpecifier::iArg:
1178 caseConversionSpecifier::oArg:
1179 caseConversionSpecifier::OArg:
1180 caseConversionSpecifier::uArg:
1181 caseConversionSpecifier::UArg:
1182 caseConversionSpecifier::xArg:
1183 caseConversionSpecifier::XArg:
1184 caseConversionSpecifier::aArg:
1185 caseConversionSpecifier::AArg:
1186 caseConversionSpecifier::eArg:
1187 caseConversionSpecifier::EArg:
1188 caseConversionSpecifier::fArg:
1189 caseConversionSpecifier::FArg:
1190 caseConversionSpecifier::gArg:
1191 caseConversionSpecifier::GArg:
1192 caseConversionSpecifier::sArg:
1193 caseConversionSpecifier::FreeBSDrArg:
1194 caseConversionSpecifier::FreeBSDyArg:
1195 caseConversionSpecifier::PArg:
1196 caseConversionSpecifier::rArg:
1197 caseConversionSpecifier::RArg:
1198 caseConversionSpecifier::kArg:
1199 caseConversionSpecifier::KArg:
1212 caseConversionSpecifier::nArg:
llvm::MachO::Target Target
clang::analyze_format_string::SpecifierResult< PrintfSpecifier > PrintfSpecifierResult
static bool ParsePrecision(FormatStringHandler &H, PrintfSpecifier &FS, const char *Start, const char *&Beg, const char *E, unsigned *argIndex)
static PrintfSpecifierResult ParsePrintfSpecifier(FormatStringHandler &H, const char *&Beg, const char *E, unsigned &argIndex, const LangOptions &LO, const TargetInfo &Target, bool Warn, bool isFreeBSDKPrintf)
static bool ParseObjCFlags(FormatStringHandler &H, PrintfSpecifier &FS, const char *FlagBeg, const char *E, bool Warn)
__device__ __2f16 float c
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
CanQualType UnsignedShortAccumTy
QualType getUnsignedPointerDiffType() const
Return the unique unsigned counterpart of "ptrdiff_t" integer type.
CanQualType getIntMaxType() const
Return the unique type for "intmax_t" (C99 7.18.1.5), defined in <stdint.h>.
QualType getPointerType(QualType T) const
Return the uniqued reference to the type for a pointer to the specified type.
CanQualType UnsignedLongFractTy
const LangOptions & getLangOpts() const
QualType getPointerDiffType() const
Return the unique type for "ptrdiff_t" (C99 7.17) defined in <stddef.h>.
CanQualType UnsignedFractTy
CanQualType UnsignedLongTy
CanQualType UnsignedLongAccumTy
CanQualType getSizeType() const
Return the unique type for "size_t" (C99 7.17), defined in <stddef.h>.
CanQualType UnsignedCharTy
CanQualType UnsignedShortFractTy
CanQualType UnsignedIntTy
CanQualType UnsignedLongLongTy
CanQualType UnsignedShortTy
const TargetInfo & getTargetInfo() const
CanQualType getSignedSizeType() const
Return the unique signed counterpart of the integer type corresponding to size_t.
CanQualType getUIntMaxType() const
Return the unique type for "uintmax_t" (C99 7.18.1.5), defined in <stdint.h>.
CanQualType UnsignedAccumTy
This class is used for builtin types like 'int'.
QualType withConst() const
Retrieves a version of this type with const applied.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of enums.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
A (possibly-)qualified type.
Exposes information about the current target.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
bool isSignedIntegerType() const
Return true if this is an integer type that is signed, according to C99 6.2.5p4 [char,...
bool isPointerType() const
QualType getPointeeType() const
If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee.
bool isAnyCharacterType() const
Determine whether this type is any of the built-in character types.
bool isRealFloatingType() const
Floating point categories.
bool isWideCharType() const
bool isUnsignedIntegerType() const
Return true if this is an integer type that is unsigned, according to C99 6.2.5p6 [which returns true...
const T * getAs() const
Member-template getAs<specific type>'.
bool isObjCRetainableType() const
Represents a GCC generic vector type.
unsigned getNumElements() const
QualType getElementType() const
static ArgType makePtrdiffT(const ArgType &A)
Create an ArgType which corresponds to the ptrdiff_t/unsigned ptrdiff_t type.
static ArgType PtrTo(const ArgType &A)
Create an ArgType which corresponds to the type pointer to A.
ArgType makeVectorType(ASTContext &C, unsigned NumElts) const
static ArgType makeSizeT(const ArgType &A)
Create an ArgType which corresponds to the size_t/ssize_t type.
MatchKind matchesType(ASTContext &C, QualType argTy) const
void setEndScanList(const char *pos)
bool isFixedPointArg() const
const char * toString() const
bool consumesDataArgument() const
unsigned getPositionalArgIndex() const
OptionalAmount VectorNumElts
static bool namedTypeToLengthModifier(QualType QT, LengthModifier &LM)
For a TypedefType QT, if it is a named integer type such as size_t, assign the appropriate value to L...
bool hasValidLengthModifier(const TargetInfo &Target, const LangOptions &LO) const
OptionalAmount FieldWidth
virtual bool HandleInvalidPrintfConversionSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen)
virtual void HandleObjCFlagsWithNonObjCConversion(const char *flagsStart, const char *flagsEnd, const char *conversionPosition)
virtual void HandleInvalidObjCModifierFlag(const char *startFlag, unsigned flagLen)
virtual void HandleNullChar(const char *nullCharacter)
virtual void handleInvalidMaskType(StringRef MaskType)
Handle mask types whose sizes are not between one and eight bytes.
virtual bool HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target)
virtual void HandleEmptyObjCModifierFlag(const char *startFlags, unsigned flagsLen)
virtual void HandleIncompleteSpecifier(const char *startSpecifier, unsigned specifierLen)
Represents the length modifier in a format string in scanf/printf.
const char * toString() const
void toString(raw_ostream &os) const
HowSpecified getHowSpecified() const
unsigned getConstantAmount() const
void setHowSpecified(HowSpecified h)
const T & getValue() const
const char * getStart() const
bool hasValidLeftJustified() const
bool hasValidFieldWidth() const
bool hasValidSpacePrefix() const
bool usesPositionalArg() const
bool fixType(QualType QT, const LangOptions &LangOpt, ASTContext &Ctx, bool IsObjCLiteral)
Changes the specifier and length according to a QualType, retaining any flags or options.
bool hasValidPrecision() const
bool hasValidLeadingZeros() const
void toString(raw_ostream &os) const
const PrintfConversionSpecifier & getConversionSpecifier() const
bool hasValidThousandsGroupingPrefix() const
ArgType getArgType(ASTContext &Ctx, bool IsObjCLiteral) const
Returns the builtin type that a data argument paired with this format specifier should have.
bool hasValidPlusPrefix() const
bool hasValidAlternativeForm() const
Defines the clang::TargetInfo interface.
Common components of both fprintf and fscanf format strings.
bool parseFormatStringHasFormattingSpecifiers(const char *Begin, const char *End, const LangOptions &LO, const TargetInfo &Target)
Return true if the given string has at least one formatting specifier.
OptionalAmount ParseNonPositionAmount(const char *&Beg, const char *E, unsigned &argIndex)
bool ParsePrintfString(FormatStringHandler &H, const char *beg, const char *end, const LangOptions &LO, const TargetInfo &Target, bool isFreeBSDKPrintf)
bool ParseFormatStringHasSArg(const char *beg, const char *end, const LangOptions &LO, const TargetInfo &Target)
Pieces specific to fprintf format strings.
The JSON file list parser is used to communicate input to InstallAPI.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4