================ @@ -435,6 +435,86 @@ bool Sema::ConstantFoldAttrArgs(const AttributeCommonInfo &CI, return true; } +// Warn if parent function does not have builtin function format attribute. +void Sema::DiagnoseMissingFormatAttributes(NamedDecl *FDecl, + SourceLocation Loc) { + if (!FDecl) + return; + + auto *FD = dyn_cast_or_null<FunctionDecl>(FDecl); + if (!FD) + return; + + unsigned BuiltinID = FD->getBuiltinID(/*ConsiderWrappers=*/true); + + // Function is not builtin if it's builtin ID is 0. + if (!BuiltinID) + return; + + // Check if function is one with format attribute. + switch (BuiltinID) { + case Builtin::BIprintf: + case Builtin::BIfprintf: + case Builtin::BIsprintf: + case Builtin::BIscanf: + case Builtin::BIfscanf: + case Builtin::BIsscanf: + case Builtin::BIvprintf: + case Builtin::BIvfprintf: + case Builtin::BIvsprintf: + break; + default: { + // In C99 mode check functions below. + if (!getLangOpts().C99) + return; + switch (BuiltinID) { + case Builtin::BIsnprintf: + case Builtin::BIvsnprintf: + case Builtin::BIvscanf: + case Builtin::BIvfscanf: + case Builtin::BIvsscanf: + break; ---------------- aaronpuchert wrote:
Why don't we move them into the switch above? Presumably they can simply not be used prior to C99? If we need this at all. https://github.com/llvm/llvm-project/pull/70024 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits