зеркало из https://github.com/microsoft/clang-1.git
(re)implement PR6542, accepting and discarding the __gcc_tdiag__
format attribute specifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99213 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a87d477c69
Коммит
3c989027f6
|
@ -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)));
|
||||
|
|
Загрузка…
Ссылка в новой задаче