clang: include/clang/AST/FormatString.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef LLVM_CLANG_AST_FORMATSTRING_H
19#define LLVM_CLANG_AST_FORMATSTRING_H
20
22#include
23
25
27
28
29
31
32
33
35public:
37 : representation(Representation), flag(false) {}
38 bool isSet() const { return flag; }
39 void set() { flag = true; }
40 void clear() { flag = false; }
42 assert(position);
43 flag = true;
44 this->position = position;
45 }
47 assert(position);
48 return position;
49 }
50 const char *toString() const { return representation; }
51
52
53 explicit operator bool() const { return flag; }
55 flag = rhs;
56 return *this;
57 }
58private:
59 const char *representation;
60 const char *position;
61 bool flag;
62};
63
64
66public:
87
91 : Position(pos), kind(k) {}
92
96
98 switch (kind) {
99 default:
100 return 1;
103 return 2;
106 return 3;
108 return 0;
109 }
110 }
111
114
115 const char *toString() const;
116
117private:
118 const char *Position;
119 Kind kind;
120};
121
123public:
126
131
134
137
146
157
164
165
166
167
169
170
171
173
174
181
182
186
187
192
193
195
198
199
203 };
204
208
211
215
219
221 switch (kind) {
224 return false;
226 return false;
228 return false;
229 default:
230 return true;
231 }
232 }
233
240
251
252 const char *toString() const;
253
255
257
258protected:
263};
264
266public:
269
270
272
273
275
276
278
279
281
282
284
285
287
289
290
292 };
293
294private:
295 Kind K;
297 const char *Name = nullptr;
298 bool Ptr = false;
299
300
301
302 enum class TypeKind { DontCare, SizeT, PtrdiffT };
303 TypeKind TK = TypeKind::DontCare;
304
305public:
309
312
313 bool isSizeT() const { return TK == TypeKind::SizeT; }
314
315 bool isPtrdiffT() const { return TK == TypeKind::PtrdiffT; }
316
317
319 assert(A.K >= InvalidTy && "ArgType cannot be pointer to invalid/unknown");
321 Res.Ptr = true;
322 return Res;
323 }
324
325
328 Res.TK = TypeKind::SizeT;
329 return Res;
330 }
331
332
333
336 Res.TK = TypeKind::PtrdiffT;
337 return Res;
338 }
339
342
344
346
348};
349
351public:
353
355 unsigned amount,
356 const char *amountStart,
357 unsigned amountLength,
359 : start(amountStart), length(amountLength), hs(howSpecified), amt(amount),
361
364 UsesPositionalArg(false), UsesDotPrefix(false) {}
365
368 UsesPositionalArg(false), UsesDotPrefix(false) {}
369
373
376
378
383
388
390
391 return start - UsesDotPrefix;
392 }
393
396 return length + UsesDotPrefix;
397 }
398
400
401 void toString(raw_ostream &os) const;
402
406 return amt + 1;
407 }
408
411
412private:
413 const char *start;
415 HowSpecified hs;
416 unsigned amt;
417 bool UsesPositionalArg : 1;
418 bool UsesDotPrefix;
419};
420
421
423protected:
428
429
430
431
434public:
438
442
444
448
452
456
460
464
468
472
476
478
481
483
485
487
489
490
491
494};
495
496}
497
498
499
500
502
505public:
508
511
515
519};
520
525
527 OptionalFlag HasThousandsGrouping;
538 StringRef MaskType;
539
540 ArgType getScalarArgType(ASTContext &Ctx, bool IsObjCLiteral) const;
541
542public:
545 IsLeftJustified("-"), HasPlusPrefix("+"), HasSpacePrefix(" "),
546 HasAlternativeForm("#"), HasLeadingZeroes("0"),
547 HasObjCTechnicalTerm("tt"), IsPrivate("private"), IsPublic("public"),
548 IsSensitive("sensitive") {}
549
551
552
557 HasThousandsGrouping.setPosition(position);
558 }
560 IsLeftJustified.setPosition(position);
561 }
563 HasPlusPrefix.setPosition(position);
564 }
566 HasSpacePrefix.setPosition(position);
567 }
569 HasAlternativeForm.setPosition(position);
570 }
572 HasLeadingZeroes.setPosition(position);
573 }
575 HasObjCTechnicalTerm.setPosition(position);
576 }
577 void setIsPrivate(const char *position) { IsPrivate.setPosition(position); }
578 void setIsPublic(const char *position) { IsPublic.setPosition(position); }
580 IsSensitive.setPosition(position);
581 }
583
584
585
589
591 Precision = Amt;
593 }
594
596 return Precision;
597 }
598
602
603
604
605
606
607
609
611 return HasThousandsGrouping;
612 }
623
626
627
628
629
631 bool IsObjCLiteral);
632
633 void toString(raw_ostream &os) const;
634
635
642
645};
646}
647
648
649
650
652
666
671
674public:
677 SuppressAssignment("*") {}
678
680 SuppressAssignment.setPosition(position);
681 }
682
684 return SuppressAssignment;
685 }
686
690
694
696 return CS.consumesDataArgument() && !SuppressAssignment;
697 }
698
700
703
704 void toString(raw_ostream &os) const;
705
707};
708
709}
710
711
712
713
715
717
719public:
722
724
725 virtual void HandlePosition(const char *startPos, unsigned posLen) {}
726
729
731
733 unsigned specifierLen) {}
734
736 unsigned flagsLen) {}
737
740
742 const char *flagsEnd,
743 const char *conversionPosition) {}
744
745
748 const char *startSpecifier,
749 unsigned specifierLen) {
750 return true;
751 }
752
754 const char *startSpecifier,
755 unsigned specifierLen,
757 return true;
758 }
759
760
762
763
764
767 const char *startSpecifier,
768 unsigned specifierLen) {
769 return true;
770 }
771
773 const char *startSpecifier,
774 unsigned specifierLen) {
775 return true;
776 }
777
779};
780
782 const char *beg, const char *end, const LangOptions &LO,
784
787
789 const char *beg, const char *end, const LangOptions &LO,
791
792
794 const char *End,
797
798}
799}
800#endif
ArgType(Kind K=UnknownTy, const char *N=nullptr)
Definition FormatString.h:306
Definition FormatString.h:718
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
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.
Definition FormatString.h:265
bool isPtrdiffT() const
Definition FormatString.h:315
Kind
Definition FormatString.h:267
@ AnyCharTy
Definition FormatString.h:268
@ InvalidTy
Definition FormatString.h:267
@ CPointerTy
Definition FormatString.h:267
@ SpecificTy
Definition FormatString.h:267
@ CStrTy
Definition FormatString.h:268
@ ObjCPointerTy
Definition FormatString.h:267
@ UnknownTy
Definition FormatString.h:267
@ WCStrTy
Definition FormatString.h:268
@ WIntTy
Definition FormatString.h:268
static ArgType makePtrdiffT(const ArgType &A)
Create an ArgType which corresponds to the ptrdiff_t/unsigned ptrdiff_t type.
Definition FormatString.h:334
static ArgType Invalid()
Definition FormatString.h:310
MatchKind
How well a given conversion specifier matches its argument.
Definition FormatString.h:271
@ NoMatch
The conversion specifier and the argument types are incompatible.
Definition FormatString.h:274
@ NoMatchPedantic
The conversion specifier and the argument type are disallowed by the C standard, but are in practice ...
Definition FormatString.h:286
@ Match
The conversion specifier and the argument type are compatible.
Definition FormatString.h:277
@ MatchPromotion
The conversion specifier and the argument type are compatible because of default argument promotions.
Definition FormatString.h:280
@ NoMatchSignedness
The conversion specifier and the argument type have different sign.
Definition FormatString.h:288
@ NoMatchTypeConfusion
The conversion specifier and the argument type are compatible, but still seems likely to be an error.
Definition FormatString.h:291
@ NoMatchPromotionTypeConfusion
The conversion specifier and the argument type are compatible but still seems likely to be an error.
Definition FormatString.h:283
static ArgType PtrTo(const ArgType &A)
Create an ArgType which corresponds to the type pointer to A.
Definition FormatString.h:318
ArgType makeVectorType(ASTContext &C, unsigned NumElts) const
MatchKind matchesArgType(ASTContext &C, const ArgType &other) const
QualType getRepresentativeType(ASTContext &C) const
bool isValid() const
Definition FormatString.h:311
std::string getRepresentativeTypeName(ASTContext &C) const
bool isSizeT() const
Definition FormatString.h:313
ArgType(QualType T, const char *N=nullptr)
Definition FormatString.h:307
static ArgType makeSizeT(const ArgType &A)
Create an ArgType which corresponds to the size_t/ssize_t type.
Definition FormatString.h:326
ArgType(CanQualType T)
Definition FormatString.h:308
ArgType(Kind K=UnknownTy, const char *N=nullptr)
Definition FormatString.h:306
MatchKind matchesType(ASTContext &C, QualType argTy) const
Definition FormatString.h:122
void setKind(Kind k)
Definition FormatString.h:235
Kind
Definition FormatString.h:124
@ cArg
Definition FormatString.h:127
@ bArg
Definition FormatString.h:132
@ pArg
Definition FormatString.h:159
@ SArg
Definition FormatString.h:163
@ InvalidSpecifier
Definition FormatString.h:125
@ uArg
Definition FormatString.h:140
@ ZArg
Definition FormatString.h:172
@ ObjCBeg
Definition FormatString.h:184
@ RArg
Definition FormatString.h:178
@ BArg
Definition FormatString.h:133
@ FreeBSDDArg
Definition FormatString.h:189
@ UIntArgBeg
Definition FormatString.h:144
@ FreeBSDrArg
Definition FormatString.h:190
@ kArg
Definition FormatString.h:175
@ PrintfConvEnd
Definition FormatString.h:197
@ rArg
Definition FormatString.h:177
@ UIntArgEnd
Definition FormatString.h:145
@ iArg
Definition FormatString.h:130
@ ScanfConvBeg
Definition FormatString.h:201
@ FArg
Definition FormatString.h:148
@ KArg
Definition FormatString.h:176
@ FixedPointArgEnd
Definition FormatString.h:180
@ fArg
Definition FormatString.h:147
@ GArg
Definition FormatString.h:152
@ FixedPointArgBeg
Definition FormatString.h:179
@ ScanfConvEnd
Definition FormatString.h:202
@ nArg
Definition FormatString.h:160
@ DoubleArgEnd
Definition FormatString.h:156
@ gArg
Definition FormatString.h:151
@ FreeBSDyArg
Definition FormatString.h:191
@ aArg
Definition FormatString.h:153
@ ObjCObjArg
Definition FormatString.h:183
@ XArg
Definition FormatString.h:143
@ eArg
Definition FormatString.h:149
@ PArg
Definition FormatString.h:168
@ OArg
Definition FormatString.h:139
@ CArg
Definition FormatString.h:162
@ IntArgEnd
Definition FormatString.h:136
@ ScanListArg
Definition FormatString.h:200
@ AArg
Definition FormatString.h:154
@ dArg
Definition FormatString.h:128
@ FreeBSDbArg
Definition FormatString.h:188
@ DArg
Definition FormatString.h:129
@ PercentArg
Definition FormatString.h:161
@ xArg
Definition FormatString.h:142
@ sArg
Definition FormatString.h:158
@ PrintErrno
Definition FormatString.h:194
@ DoubleArgBeg
Definition FormatString.h:155
@ PrintfConvBeg
Definition FormatString.h:196
@ IntArgBeg
Definition FormatString.h:135
@ UArg
Definition FormatString.h:141
@ EArg
Definition FormatString.h:150
@ ObjCEnd
Definition FormatString.h:185
@ oArg
Definition FormatString.h:138
bool isUIntArg() const
Definition FormatString.h:243
ConversionSpecifier(bool isPrintf=true)
Definition FormatString.h:205
std::optional< ConversionSpecifier > getStandardSpecifier() const
bool IsPrintf
Definition FormatString.h:259
Kind kind
Definition FormatString.h:262
unsigned getLength() const
Definition FormatString.h:236
void setEndScanList(const char *pos)
Definition FormatString.h:239
StringRef getCharacters() const
Definition FormatString.h:216
bool isPrintfKind() const
Definition FormatString.h:254
const char * EndScanList
Definition FormatString.h:261
bool isFixedPointArg() const
Definition FormatString.h:248
bool isAnyIntArg() const
Definition FormatString.h:244
const char * getStart() const
Definition FormatString.h:212
const char * Position
Definition FormatString.h:260
const char * toString() const
bool consumesDataArgument() const
Definition FormatString.h:220
bool isDoubleArg() const
Definition FormatString.h:245
ConversionSpecifier(bool isPrintf, const char *pos, Kind k)
Definition FormatString.h:209
bool isIntArg() const
Definition FormatString.h:241
Kind getKind() const
Definition FormatString.h:234
Definition FormatString.h:422
static bool namedTypeToLengthModifier(ASTContext &Ctx, 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...
LengthModifier LM
Definition FormatString.h:424
unsigned getArgIndex() const
Definition FormatString.h:449
void setFieldWidth(const OptionalAmount &Amt)
Definition FormatString.h:473
unsigned getPositionalArgIndex() const
Definition FormatString.h:453
bool hasStandardLengthConversionCombination() const
void setUsesPositionalArg()
Definition FormatString.h:443
bool usesPositionalArg() const
Definition FormatString.h:477
const OptionalAmount & getFieldWidth() const
Definition FormatString.h:461
void setArgIndex(unsigned i)
Definition FormatString.h:445
void setLengthModifier(LengthModifier lm)
Definition FormatString.h:439
FormatSpecifier(bool isPrintf)
Definition FormatString.h:435
unsigned argIndex
Definition FormatString.h:433
bool hasStandardConversionSpecifier(const LangOptions &LangOpt) const
const LengthModifier & getLengthModifier() const
Definition FormatString.h:457
const OptionalAmount & getVectorNumElts() const
Definition FormatString.h:469
bool hasStandardLengthModifier() const
OptionalAmount VectorNumElts
Definition FormatString.h:427
ConversionSpecifier CS
Definition FormatString.h:426
bool hasValidLengthModifier(const TargetInfo &Target, const LangOptions &LO) const
bool UsesPositionalArg
Positional arguments, an IEEE extension: IEEE Std 1003.1, 2004 Edition http://www....
Definition FormatString.h:432
std::optional< LengthModifier > getCorrectedLengthModifier() const
void setVectorNumElts(const OptionalAmount &Amt)
Definition FormatString.h:465
OptionalAmount FieldWidth
Definition FormatString.h:425
virtual bool HandleInvalidPrintfConversionSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen)
Definition FormatString.h:746
virtual void HandleObjCFlagsWithNonObjCConversion(const char *flagsStart, const char *flagsEnd, const char *conversionPosition)
Definition FormatString.h:741
virtual void HandleInvalidObjCModifierFlag(const char *startFlag, unsigned flagLen)
Definition FormatString.h:738
virtual void HandleIncompleteScanList(const char *start, const char *end)
Definition FormatString.h:778
virtual void HandleNullChar(const char *nullCharacter)
Definition FormatString.h:723
virtual void handleInvalidMaskType(StringRef MaskType)
Handle mask types whose sizes are not between one and eight bytes.
Definition FormatString.h:761
virtual ~FormatStringHandler()
virtual void HandlePosition(const char *startPos, unsigned posLen)
Definition FormatString.h:725
virtual bool HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS, const char *startSpecifier, unsigned specifierLen, const TargetInfo &Target)
Definition FormatString.h:753
virtual void HandleInvalidPosition(const char *startPos, unsigned posLen, PositionContext p)
Definition FormatString.h:727
virtual void HandleEmptyObjCModifierFlag(const char *startFlags, unsigned flagsLen)
Definition FormatString.h:735
virtual void HandleZeroPosition(const char *startPos, unsigned posLen)
Definition FormatString.h:730
virtual void HandleIncompleteSpecifier(const char *startSpecifier, unsigned specifierLen)
Definition FormatString.h:732
virtual bool HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen)
Definition FormatString.h:772
virtual bool HandleInvalidScanfConversionSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen)
Definition FormatString.h:765
FormatStringHandler()
Definition FormatString.h:720
Represents the length modifier in a format string in scanf/printf.
Definition FormatString.h:65
Kind getKind() const
Definition FormatString.h:112
LengthModifier()
Definition FormatString.h:88
LengthModifier(const char *pos, Kind k)
Definition FormatString.h:90
unsigned getLength() const
Definition FormatString.h:97
const char * toString() const
const char * getStart() const
Definition FormatString.h:93
void setKind(Kind k)
Definition FormatString.h:113
Kind
Definition FormatString.h:67
@ AsMAllocate
Definition FormatString.h:83
@ AsWideChar
Definition FormatString.h:85
@ AsShortLong
Definition FormatString.h:71
@ AsLong
Definition FormatString.h:72
@ AsLongDouble
Definition FormatString.h:81
@ AsChar
Definition FormatString.h:69
@ AsInt64
Definition FormatString.h:80
@ AsInt3264
Definition FormatString.h:79
@ AsWide
Definition FormatString.h:84
@ AsSizeT
Definition FormatString.h:76
@ AsAllocate
Definition FormatString.h:82
@ AsQuad
Definition FormatString.h:74
@ AsIntMax
Definition FormatString.h:75
@ AsShort
Definition FormatString.h:70
@ AsInt32
Definition FormatString.h:78
@ AsPtrDiff
Definition FormatString.h:77
@ None
Definition FormatString.h:68
@ AsLongLong
Definition FormatString.h:73
Definition FormatString.h:350
ArgType getArgType(ASTContext &Ctx) const
void toString(raw_ostream &os) const
const char * getStart() const
Definition FormatString.h:389
unsigned getArgIndex() const
Definition FormatString.h:379
bool usesDotPrefix() const
Definition FormatString.h:409
void setUsesDotPrefix()
Definition FormatString.h:410
bool hasDataArgument() const
Definition FormatString.h:377
HowSpecified getHowSpecified() const
Definition FormatString.h:374
bool usesPositionalArg() const
Definition FormatString.h:403
unsigned getConstantAmount() const
Definition FormatString.h:384
OptionalAmount(unsigned Amount)
Definition FormatString.h:366
bool isInvalid() const
Definition FormatString.h:370
OptionalAmount(HowSpecified howSpecified, unsigned amount, const char *amountStart, unsigned amountLength, bool usesPositionalArg)
Definition FormatString.h:354
unsigned getConstantLength() const
Definition FormatString.h:394
unsigned getPositionalArgIndex() const
Definition FormatString.h:404
HowSpecified
Definition FormatString.h:352
@ Invalid
Definition FormatString.h:352
@ Arg
Definition FormatString.h:352
@ Constant
Definition FormatString.h:352
@ NotSpecified
Definition FormatString.h:352
OptionalAmount(bool valid=true)
Definition FormatString.h:362
void setHowSpecified(HowSpecified h)
Definition FormatString.h:375
Class representing optional flags with location and representation information.
Definition FormatString.h:34
const char * toString() const
Definition FormatString.h:50
void set()
Definition FormatString.h:39
bool isSet() const
Definition FormatString.h:38
OptionalFlag(const char *Representation)
Definition FormatString.h:36
void setPosition(const char *position)
Definition FormatString.h:41
void clear()
Definition FormatString.h:40
OptionalFlag & operator=(const bool &rhs)
Definition FormatString.h:54
const char * getPosition() const
Definition FormatString.h:46
Definition FormatString.h:504
bool isDoubleArg() const
Definition FormatString.h:513
bool isObjCArg() const
Definition FormatString.h:512
PrintfConversionSpecifier(const char *pos, Kind k)
Definition FormatString.h:509
static bool classof(const analyze_format_string::ConversionSpecifier *CS)
Definition FormatString.h:516
PrintfConversionSpecifier()
Definition FormatString.h:506
Definition FormatString.h:526
const OptionalFlag & isPrivate() const
Definition FormatString.h:619
void setHasAlternativeForm(const char *position)
Definition FormatString.h:568
bool hasValidLeftJustified() const
void setIsSensitive(const char *position)
Definition FormatString.h:579
bool hasValidFieldWidth() const
void setMaskType(StringRef S)
Definition FormatString.h:625
void setHasSpacePrefix(const char *position)
Definition FormatString.h:565
bool hasValidSpacePrefix() const
void setHasThousandsGrouping(const char *position)
Definition FormatString.h:556
const OptionalAmount & getPrecision() const
Definition FormatString.h:595
static PrintfSpecifier Parse(const char *beg, const char *end)
const OptionalFlag & hasSpacePrefix() const
Definition FormatString.h:617
bool usesPositionalArg() const
Definition FormatString.h:622
void setIsLeftJustified(const char *position)
Definition FormatString.h:559
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.
StringRef getMaskType() const
Definition FormatString.h:624
const OptionalFlag & isSensitive() const
Definition FormatString.h:621
const OptionalFlag & isLeftJustified() const
Definition FormatString.h:613
bool hasValidPrecision() const
const OptionalFlag & hasLeadingZeros() const
Definition FormatString.h:616
const OptionalFlag & hasAlternativeForm() const
Definition FormatString.h:615
bool hasValidLeadingZeros() const
void setHasPlusPrefix(const char *position)
Definition FormatString.h:562
void setIsPrivate(const char *position)
Definition FormatString.h:577
PrintfSpecifier()
Definition FormatString.h:543
void toString(raw_ostream &os) const
const PrintfConversionSpecifier & getConversionSpecifier() const
Definition FormatString.h:586
void setHasLeadingZeros(const char *position)
Definition FormatString.h:571
const OptionalFlag & hasPlusPrefix() const
Definition FormatString.h:614
const OptionalFlag & hasThousandsGrouping() const
Definition FormatString.h:610
void setUsesPositionalArg()
Definition FormatString.h:582
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.
void setIsPublic(const char *position)
Definition FormatString.h:578
const OptionalFlag & hasObjCTechnicalTerm() const
Definition FormatString.h:618
void setPrecision(const OptionalAmount &Amt)
Definition FormatString.h:590
void setHasObjCTechnicalTerm(const char *position)
Definition FormatString.h:574
const OptionalFlag & isPublic() const
Definition FormatString.h:620
bool consumesDataArgument() const
Definition FormatString.h:599
bool hasValidPlusPrefix() const
void setConversionSpecifier(const PrintfConversionSpecifier &cs)
Definition FormatString.h:553
bool hasValidAlternativeForm() const
Definition FormatString.h:654
ScanfConversionSpecifier(const char *pos, Kind k)
Definition FormatString.h:659
ScanfConversionSpecifier()
Definition FormatString.h:656
static bool classof(const analyze_format_string::ConversionSpecifier *CS)
Definition FormatString.h:662
Definition FormatString.h:672
static ScanfSpecifier Parse(const char *beg, const char *end)
bool fixType(QualType QT, QualType RawQT, const LangOptions &LangOpt, ASTContext &Ctx)
const OptionalFlag & getSuppressAssignment() const
Definition FormatString.h:683
ScanfSpecifier()
Definition FormatString.h:675
void toString(raw_ostream &os) const
bool consumesDataArgument() const
Definition FormatString.h:695
void setConversionSpecifier(const ScanfConversionSpecifier &cs)
Definition FormatString.h:687
const ScanfConversionSpecifier & getConversionSpecifier() const
Definition FormatString.h:691
void setSuppressAssignment(const char *position)
Definition FormatString.h:679
ArgType getArgType(ASTContext &Ctx) const
Common components of both fprintf and fscanf format strings.
Definition FormatString.h:30
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.
bool ParsePrintfString(FormatStringHandler &H, const char *beg, const char *end, const LangOptions &LO, const TargetInfo &Target, bool isFreeBSDKPrintf)
PositionContext
Definition FormatString.h:716
@ FieldWidthPos
Definition FormatString.h:716
@ PrecisionPos
Definition FormatString.h:716
bool ParseScanfString(FormatStringHandler &H, const char *beg, const char *end, const LangOptions &LO, const TargetInfo &Target)
bool ParseFormatStringHasSArg(const char *beg, const char *end, const LangOptions &LO, const TargetInfo &Target)
Pieces specific to fprintf format strings.
Definition FormatString.h:501
Pieces specific to fscanf format strings.
Definition FormatString.h:651
The JSON file list parser is used to communicate input to InstallAPI.
CanQual< Type > CanQualType
Represents a canonical, potentially-qualified type.
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
const FunctionProtoType * T
U cast(CodeGen::Address addr)
float __ovld __cnfn length(float)
Return the length of vector p, i.e., sqrt(p.x2 + p.y 2 + ...)