XIVN1987 发表于 2019-1-13 23:44:53

求助,gcc报警告“always_inline function might not be inlinable”


用gcc编译一个Cortex-M3芯片的程序,,结果报警告如下:
cmsis/inc/cmsis_gcc.h:58:57: warning: always_inline function might not be inlinable [-Wattributes]
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)

cmsis_gcc.h是ARM官方的CMSIS中的头文件,,其中__enable_irq定义如下:
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
{
__ASM volatile ("cpsie i" : : : "memory");
}

感觉__enable_irq内容很简单,,编译成内联函数应该完全没问题啊,,不知道为什么会报这个警告

cmsis_gcc.h中几十个内联函数全部都报这个警告,,工程里大多数文件都会间接包含这个文件,,所以一编译全是这个警告信息,,很崩溃{:mad:}

aammoo 发表于 2019-1-14 08:42:29

不是写着always嘛,应该是不管怎样,只要有inline都会报

Zphoenix 发表于 2019-1-14 09:29:40

你看下__STATIC_INLINE定义是否正确,__attribute__( ( always_inline ) )必须和inline一起用

XIVN1987 发表于 2019-1-14 09:44:12

Zphoenix 发表于 2019-1-14 09:29
你看下__STATIC_INLINE定义是否正确,__attribute__( ( always_inline ) )必须和inline一起用 ...


不是这个问题,,我把__STATIC_INLINE替换成static inline后没解决,,报错如下:

../../lib/cmsis/inc/cmsis_gcc.h:58:55: warning: always_inline function might not be inlinable [-Wattributes]
__attribute__( ( always_inline ) ) static inline void __enable_irq(void)
                                                       ^

XIVN1987 发表于 2019-1-14 09:52:45

aammoo 发表于 2019-1-14 08:42
不是写着always嘛,应该是不管怎样,只要有inline都会报


意思是,,只要在代码中使用了__attribute__( ( always_inline ) ),,GCC编译就会报这个警告

那岂不是只要用GCC编译Cortex-M内核单片机的程序就会报这个警告了??毕竟任何Cortex-M单片机都会使用CMSIS中的头文件啊,,,

XIVN1987 发表于 2019-1-14 13:08:58

问题解决了

cmsis_gcc.h 中__enable_irq()的定义如下:
__attribute__( ( always_inline ) ) static inline void __enable_irq(void)
{
        __ASM volatile ("cpsie i" : : : "memory");
}

我用 gcc -E 生成了.c 文件的预处理文件,,在预处理文件中__enalbe_irq()的定义变成了
# 58 "../../lib/cmsis/inc/cmsis_gcc.h"
# 58 "../../lib/cmsis/inc/cmsis_gcc.h"
__attribute__( ( always_inline ) ) static void __enable_irq(void)
{
        __asm volatile ("cpsie i" : : : "memory");
}

原来的“ static inline ”变成了“ static ”,,inline 没了,,

我就想可能代码某处把 inline 给宏定义了,,所以搜索了下,,果然,在 portmacro.h 中有一行:
#define inline

把这行注释掉问题就解决了

这个文件是厂家的 SDK 里面的,,不知道为什么要这么定义,,

zhucezhuanyong 发表于 2019-4-5 18:26:50

谢谢经验分享,我参考这个,也解决了{:lol:}
页: [1]
查看完整版本: 求助,gcc报警告“always_inline function might not be inlinable”