https://github.com/c-rhodes updated 
https://github.com/llvm/llvm-project/pull/178497

>From ce4bf64e447b81746c3b53964282e9e369b1893e Mon Sep 17 00:00:00 2001
From: Daniel Thornburgh <[email protected]>
Date: Wed, 28 Jan 2026 11:20:56 -0800
Subject: [PATCH] [clang] Check that first modular_format argument is an
 identifier (#178322)

This fixes an oversight discovered in #147431.

(cherry picked from commit 6f79891cf582aba7998c5caba9d7a03fd7cc61bc)
---
 clang/lib/Sema/SemaDeclAttr.cpp       | 5 +++++
 clang/test/Sema/attr-modular-format.c | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index d762bcd789bf5..3f0ea5c8f3eba 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -7035,6 +7035,11 @@ ModularFormatAttr *Sema::mergeModularFormatAttr(
 
 static void handleModularFormat(Sema &S, Decl *D, const ParsedAttr &AL) {
   bool Valid = true;
+  if (!AL.isArgIdent(0)) {
+    S.Diag(AL.getLoc(), diag::err_attribute_argument_n_type)
+        << AL << 1 << AANT_ArgumentIdentifier;
+    Valid = false;
+  }
   StringRef ImplName;
   if (!S.checkStringLiteralArgumentAttr(AL, 1, ImplName))
     Valid = false;
diff --git a/clang/test/Sema/attr-modular-format.c 
b/clang/test/Sema/attr-modular-format.c
index b7ae519cedbeb..9d7e1ac1b485a 100644
--- a/clang/test/Sema/attr-modular-format.c
+++ b/clang/test/Sema/attr-modular-format.c
@@ -3,6 +3,8 @@
 int printf(const char *fmt, ...)  
__attribute__((modular_format(__modular_printf, "__printf", "float")));  // 
no-error
 int myprintf(const char *fmt, ...)  
__attribute__((modular_format(__modular_printf, "__printf", "float")));  // 
expected-error {{'modular_format' attribute requires 'format' attribute}}
 
+int string_impl_fn(const char *fmt, ...)  
__attribute__((modular_format("__modular_printf", "__printf", "float"), 
format(printf, 1, 2)));  // expected-error {{'modular_format' attribute 
requires parameter 1 to be an identifier}}
+
 int lprintf(const char *fmt, ...) 
__attribute__((modular_format(__modular_printf, L"__printf", L"float"), 
format(printf, 1, 2)));
 // expected-warning@-1 2{{encoding prefix 'L' on an unevaluated string literal 
has no effect}}
 

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to