抑制具有灵活数组的结构的 Wlto 类型不匹配警告
Suppress -Wlto-type-mismatch warning for struct with flexible array
我正在使用 -Wlto-type-mismatch
和 -Werror
集进行 gcc 编译(为了项目的其余部分)。我有一个 extern
struct
和一个灵活的数组,它引发了 lto-type-mismatch
warning/error。
下面是提炼成示例的代码:
h.h:
typedef struct {
int i;
int ints[];
} struct_t;
a.c:
#include "h.h"
extern struct_t my_struct;
int main() { // just here to avoid optimizing away the decls
return my_struct.ints[0];
}
b.c:
#include "h.h"
struct_t my_struct = {
20,
{
1,
2,
},
};
正在编译(此处使用arm gcc,但使用native gcc也失败)
$ arm-none-eabi-gcc -flto -Wlto-type-mismatch -Werror a.c b.c -o foo
a.c:3:17: error: size of 'my_struct' differ from the size of original declaration [-Werror=lto-type-mismatch]
extern struct_t my_struct;
^
b.c:3:10: note: 'my_struct' was previously declared here
struct_t my_struct = {
^
lto1: all warnings being treated as errors
我试过包装
中的一个或两个声明
#pragma gcc diagnostic push
#pragma gcc diagnostic ignore "-Wlto-type-mismatch"
<decl>
#pragma gcc diagnostic pop
但我无法抑制警告,可能是因为它是 link 时间优化,而 #pragma
行在那时早已消失。
问题
你能建议一些方法来编译它并在别处保留警告吗? (或者 -Wlto-type-mismatch
不应该抱怨灵活数组吗?如果是这样,我可以提交错误报告。)
在 gcc-help 邮件列表上查询后,我提交了一个错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81440。有事会在这里跟进。]
跟进: 该错误已在 gcc 7.3.1 或更早版本中修复。
我正在使用 -Wlto-type-mismatch
和 -Werror
集进行 gcc 编译(为了项目的其余部分)。我有一个 extern
struct
和一个灵活的数组,它引发了 lto-type-mismatch
warning/error。
下面是提炼成示例的代码:
h.h:
typedef struct {
int i;
int ints[];
} struct_t;
a.c:
#include "h.h"
extern struct_t my_struct;
int main() { // just here to avoid optimizing away the decls
return my_struct.ints[0];
}
b.c:
#include "h.h"
struct_t my_struct = {
20,
{
1,
2,
},
};
正在编译(此处使用arm gcc,但使用native gcc也失败)
$ arm-none-eabi-gcc -flto -Wlto-type-mismatch -Werror a.c b.c -o foo
a.c:3:17: error: size of 'my_struct' differ from the size of original declaration [-Werror=lto-type-mismatch]
extern struct_t my_struct;
^
b.c:3:10: note: 'my_struct' was previously declared here
struct_t my_struct = {
^
lto1: all warnings being treated as errors
我试过包装
中的一个或两个声明#pragma gcc diagnostic push
#pragma gcc diagnostic ignore "-Wlto-type-mismatch"
<decl>
#pragma gcc diagnostic pop
但我无法抑制警告,可能是因为它是 link 时间优化,而 #pragma
行在那时早已消失。
问题
你能建议一些方法来编译它并在别处保留警告吗? (或者 -Wlto-type-mismatch
不应该抱怨灵活数组吗?如果是这样,我可以提交错误报告。)
在 gcc-help 邮件列表上查询后,我提交了一个错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81440。有事会在这里跟进。]
跟进: 该错误已在 gcc 7.3.1 或更早版本中修复。