【发布时间】:2017-08-10 02:05:53
【问题描述】:
在使用带有 -O2 CFLAGS 的 pthread_cleanup_push/pop 编译一段代码时,我收到了一些警告。只需删除 Makefile 中的 O2 cflags 即可使其顺利编译。
是否禁止对这些 pthread 宏使用 gcc 优化?我无法在 man 或文档中找到任何内容。顺便说一句,有没有其他方法可以在线程末尾清理东西?它也与 gcc arm 完美配合。但不是在 x86 gcc 上。
警告:
x/x.c:1292:2: warning: variable ‘__cancel_routine’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
pthread_cleanup_push(x_cleanup, &fd);
我当前的 CFLAGS 选项:
-W -Wall -Wformat -Wformat-security -Wextra -Wno-unused-result,
-Wextra -Wno-long-long -Wno-variadic-macros -Wno-missing-field-initializers
-std=gnu99 -O2
【问题讨论】:
-
我想你已经看过BZ 61118?
-
@yugr 是的,即使我不确定这是否是原因,我已经看到了。该错误是在 2014 年报告的......它很疯狂......唯一的解决方案是删除 Werror 直到修复?在 x86 上回滚以前版本的 gcc 吗?这不是我的代码的死锁,因为 ARM 交叉编译器不存在此问题。但我确实想确定这不是一个更大的问题,可能导致我的代码出现意外行为或错误。
-
您可以将
-Wno-clobbered添加到禁用警告列表中。
标签: c gcc pthreads setjmp cflags