[clang] [clang] Catch missing format attributes (PR #105479)

Aaron Puchert via cfe-commits cfe-commits at lists.llvm.org
Sat Jun 7 16:05:37 PDT 2025


================
@@ -3460,8 +3460,10 @@ void Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
     }
   }
 
-  if (FD)
+  if (FD) {
     diagnoseArgDependentDiagnoseIfAttrs(FD, ThisArg, Args, Loc);
+    DetectMissingFormatAttributes(FD, Args, Loc);
----------------
aaronpuchert wrote:

Can we put this into the block up there with the comment "Printf and scanf checking"? We care about the same case: calling a function with a `FormatAttr`. Up there is a loop going over these attributes. Why don't we add this call to the loop, processing a single attribute at a time?

The reason is to avoid adding complexity in the common case of no such attribute. Up there we already have the check, so we're not adding anything.

And I don't think we lose anything. If anything, this should make the check simpler.
* Callees with multiple attributes are probably rare, but in that case we could still forward multiple format strings as @apple-fcloutier pointed out.
* If we treat these attributes independently and suggest contradictory attributes, this is probably an issue anyway.

Although in theory I don't see a reason why this is contradictory at all, at least without argument checking: it would simply constrain the format string to strings accepted by multiple formatting languages.

Or, as @apple-fcloutier suggested, just put it into `CheckFormatArguments`.

https://github.com/llvm/llvm-project/pull/105479


More information about the cfe-commits mailing list