PR4350: Make sure we don't create invalid printf attributes. This isn't
visible anywhere normally because the printf format checks for this case, and we don't print out attribute values anywhere. Original patch by Roberto Bagnara. llvm-svn: 73157
This commit is contained in:
parent
9a8f2f7d58
commit
f479984762
|
@ -3208,7 +3208,7 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
|
|||
if (Context.BuiltinInfo.isPrintfLike(BuiltinID, FormatIdx, HasVAListArg)) {
|
||||
if (!FD->getAttr<FormatAttr>())
|
||||
FD->addAttr(::new (Context) FormatAttr("printf", FormatIdx + 1,
|
||||
FormatIdx + 2));
|
||||
HasVAListArg ? 0 : FormatIdx + 2));
|
||||
}
|
||||
|
||||
// Mark const if we don't care about errno and that is the only
|
||||
|
@ -3239,10 +3239,12 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
|
|||
// FIXME: We known better than our headers.
|
||||
const_cast<FormatAttr *>(Format)->setType("printf");
|
||||
} else
|
||||
FD->addAttr(::new (Context) FormatAttr("printf", 1, 2));
|
||||
FD->addAttr(::new (Context) FormatAttr("printf", 1,
|
||||
Name->isStr("NSLogv") ? 0 : 2));
|
||||
} else if (Name->isStr("asprintf") || Name->isStr("vasprintf")) {
|
||||
if (!FD->getAttr<FormatAttr>())
|
||||
FD->addAttr(::new (Context) FormatAttr("printf", 2, 3));
|
||||
FD->addAttr(::new (Context) FormatAttr("printf", 2,
|
||||
Name->isStr("vasprintf") ? 0 : 3));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue