[RFC] fix semicolon at the end of RTE_LOG_REGISTER_DEFAULT

Morten Brørup mb at smartsharesystems.com
Sat Apr 20 09:48:24 CEST 2024


> From: Stephen Hemminger [mailto:stephen at networkplumber.org]
> Sent: Saturday, 20 April 2024 02.08
> 
> The macro RTE_LOG_REGISTER_DEFAULT emits code for an initialization
> function. If a driver (and most do) adds a semicolon after the macro.
> 
> RTE_LOG_REGISTER_DEFAULT(logtype_foo, INFO);
> 
> Is equivalent to:
> 
> 	int logtype_foo;
> 	static void __logtype_foo(void) {
> 	    logtype_foo = rte_log_register_type_and_pick_level(name,
> 	                  	 RTE_LOG_INFO);
> 		if (type < 0)
> 			logtype_foo = RTE_LOGTYPE_EAL;
> 	};
> The problem is that extra semi-colon after the function.
> 
> If code is built with highest level of warnings (pedantic),
> then it will generate a warning.
>   warning: ISO C does not allow extra ‘;’ outside of a function
> 
> This is a treewide fix for this.

It seems weird omitting the semicolon when using this macro.

How about using the same trick as RTE_INIT_PRIO():

#define RTE_INIT_PRIO(name, priority) \
	static void name(void); \
	static int __cdecl name ## _thunk(void) { name(); return 0; } \
	__pragma(const_seg(CTOR_PRIORITY_TO_SECTION(priority))) \
	__declspec(allocate(CTOR_PRIORITY_TO_SECTION(priority))) \
	    _PIFV name ## _pointer = &name ## _thunk; \
	__pragma(const_seg()) \
	static void name(void)



More information about the dev mailing list