[Bug c/68334] New: combination of weak and noreturn attributes
chantry.xavier at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Nov 13 12:44:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68334
Bug ID: 68334
Summary: combination of weak and noreturn attributes
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: chantry.xavier at gmail dot com
Target Milestone: ---
It's probably more a nonsense than a bug, and all compilers behave the same way
(from gcc 4.4 to 5.2 and clang too).
If a function definition has both weak and noreturn, then it looks like the
noreturn optimization is applied anyway in the local compilation unit, even
though the function can be overriden by another one at link time.
main.c
---
#include <assert.h>
#include "test.h"
__attribute__((weak)) __attribute__((noreturn))
void test(void)
{
assert (0);
}
int main(void)
{
test();
return 0;
}
---
test.c
---
#include <stdio.h>
#include "test.h"
void test(void)
{
printf("toto\n");
}
---
test.h
---
void test(void);
---
$CC -Wall -Wextra -c test.c -o test.o
$CC -Wall -Wextra -c main.c -o main.o
$CC -Wall -Wextra main.o test.o -o test
Running ./test produces the following output which shows that the function was
overriden but the code is executed twice and then segfaults:
---
toto
toto
zsh: segmentation fault (core dumped) ./test
---
I thought that noreturn optim shouldn't be applied in this case (it could maybe
still be done at linking time when using lto).
Otherwise I might have missed something in the doc which explains what's wrong.
More information about the Gcc-bugs
mailing list