gpt4 book ai didi

c - pthread_cleanup_push 和 O2 CFLAGS

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:56 25 4
gpt4 key购买 nike

在使用 pthread_cleanup_push/pop 和 -O2 CFLAGS 编译一段代码时,我收到一些警告。只需删除 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

最佳答案

此问题现在已在 GCC 跟踪器中多次报告(参见 here)。我相信这会警告 pthread.h 中的实际问题(请参阅 my comment )。 __cancel_routine 没有标记为 volatile,所以它的值在通过 longjmp 返回后确实是未定义的,这可能会导致任意后果。

The only solution is to remove the Werror until a fix ?

我宁愿使用 -Wno-clobbered,以保持启用其他警告。

Roll back on a previous version of gcc on x86 ?

您必须回滚到 2014 年之前的时间,这是一个很大的变化...我认为如果代码适合您,只需禁用 -Wclobbered(带有描述性注释)。

But I did want to be sure that its was not a bigger issue which can cause unexpected behavior of my code or bugs.

Glibc 代码看起来很可疑。我会等待 GCC 开发人员的评论,如果没有,report this to Glibc developers .

关于c - pthread_cleanup_push 和 O2 CFLAGS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42875754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com