(re)implement PR6542, accepting and discarding the __gcc_tdiag__
format attribute specifier. llvm-svn: 99213
This commit is contained in:
parent
cb5a828a45
commit
12161d3d1a
|
@ -1115,6 +1115,7 @@ enum FormatAttrKind {
|
|||
NSStringFormat,
|
||||
StrftimeFormat,
|
||||
SupportedFormat,
|
||||
IgnoredFormat,
|
||||
InvalidFormat
|
||||
};
|
||||
|
||||
|
@ -1136,6 +1137,9 @@ static FormatAttrKind getFormatAttrKind(llvm::StringRef Format) {
|
|||
Format == "zcmn_err")
|
||||
return SupportedFormat;
|
||||
|
||||
if (Format == "gcc_tdiag")
|
||||
return IgnoredFormat;
|
||||
|
||||
return InvalidFormat;
|
||||
}
|
||||
|
||||
|
@ -1171,6 +1175,10 @@ static void HandleFormatAttr(Decl *d, const AttributeList &Attr, Sema &S) {
|
|||
|
||||
// Check for supported formats.
|
||||
FormatAttrKind Kind = getFormatAttrKind(Format);
|
||||
|
||||
if (Kind == IgnoredFormat)
|
||||
return;
|
||||
|
||||
if (Kind == InvalidFormat) {
|
||||
S.Diag(Attr.getLoc(), diag::warn_attribute_type_not_supported)
|
||||
<< "format" << Attr.getParameterName()->getName();
|
||||
|
|
|
@ -68,3 +68,7 @@ void __attribute__((format(printf, 1, 0)))
|
|||
foo2(const char *fmt, va_list va) {
|
||||
xx_vprintf(foo(fmt), va);
|
||||
}
|
||||
|
||||
// PR6542
|
||||
extern void gcc_format (const char *, ...)
|
||||
__attribute__ ((__format__(__gcc_tdiag__, 1, 2)));
|
||||
|
|
Loading…
Reference in New Issue