On a declaration, __printf can come at the end, but for a definition, it is not accepted after argument list and before the curly brace, so instead of having a declaration with the attribute as well as a definition, just have a single definition and move the __printf to the start.
Signed-off-by: Ahmad Fatoum <a.fat...@pengutronix.de> --- efi/devicepath.c | 6 ++---- include/linux/printk.h | 11 ++++------- include/printf.h | 3 +-- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/efi/devicepath.c b/efi/devicepath.c index ecb3e7b64cc1..342422ea1a11 100644 --- a/efi/devicepath.c +++ b/efi/devicepath.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only #include <common.h> +#include <linux/compiler.h> #include <efi.h> #include <efi/efi-util.h> #include <malloc.h> @@ -15,10 +16,7 @@ struct string { unsigned used; }; -char *cprintf(struct string *str, const char *fmt, ...) - __attribute__ ((format(__printf__, 2, 3))); - -char *cprintf(struct string *str, const char *fmt, ...) +static __printf(2, 3) char *cprintf(struct string *str, const char *fmt, ...) { void *buf = str->str; unsigned bufsize = 0; diff --git a/include/linux/printk.h b/include/linux/printk.h index d4aafc84e2dd..f1f76fb71859 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -3,6 +3,7 @@ #define __LINUX_PRINTK_H #include <linux/list.h> +#include <linux/compiler.h> #include <linux/err.h> #include <printf.h> #include <stdarg.h> @@ -40,9 +41,7 @@ int dev_printf(int level, const struct device *dev, const char *format, ...) int pr_print(int level, const char *format, ...) __attribute__ ((format(__printf__, 2, 3))); #else -static int pr_print(int level, const char *format, ...) - __attribute__ ((format(__printf__, 2, 3))); -static inline int pr_print(int level, const char *format, ...) +static inline __printf(2, 3) int pr_print(int level, const char *format, ...) { return 0; } @@ -104,10 +103,8 @@ static inline int pr_print(int level, const char *format, ...) int dev_err_probe(struct device *dev, int err, const char *fmt, ...) __attribute__ ((format(__printf__, 3, 4))); #elif !defined(dev_err_probe) -static int dev_err_probe(struct device *dev, int err, const char *fmt, ...) - __attribute__ ((format(__printf__, 3, 4))); -static inline int dev_err_probe(struct device *dev, int err, const char *fmt, - ...) +static inline __printf(3, 4) int dev_err_probe(struct device *dev, + int err, const char *fmt, ...) { return err; } diff --git a/include/printf.h b/include/printf.h index 9a84850d02bf..eac78aec92c1 100644 --- a/include/printf.h +++ b/include/printf.h @@ -20,8 +20,7 @@ struct device; (IN_PBL && defined(CONFIG_PBL_CONSOLE)) int printf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2))); #else -static int printf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2))); -static inline int printf(const char *fmt, ...) +static inline __printf(1, 2) int printf(const char *fmt, ...) { return 0; } -- 2.39.5