[Bug c++/99185] New: asan initialization-order-fiasco false positive
kal.conley at dectris dot com
gcc-bugzilla@gcc.gnu.org
Sat Feb 20 23:26:00 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99185
Bug ID: 99185
Summary: asan initialization-order-fiasco false positive
Product: gcc
Version: 10.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: kal.conley at dectris dot com
Target Milestone: ---
The default constructor does not initialize primitive types.
a.cc:
=====
struct A {
int value;
A() = default;
};
A g;
b.cc:
=====
struct A {
int value;
A() = default;
};
extern A g;
int b = []() {
g.value = 1;
return 0;
}();
int main() {
return 0;
}
$ g++ -fsanitize=address -std=c++20 a.cc b.cc; ./a.out
=================================================================
==3844820==ERROR: AddressSanitizer: initialization-order-fiasco on address
0x000000404160 at pc 0x0000004013c6 bp 0x7fff2371ecc0 sp 0x7fff2371ecb0
WRITE of size 4 at 0x000000404160 thread T0
#0 0x4013c5 in b::{lambda()#1}::operator()() const
(/home/kal/work/cxx/a.out+0x4013c5)
#1 0x4012a8 in __static_initialization_and_destruction_0(int, int)
(/home/kal/work/cxx/a.out+0x4012a8)
#2 0x40134b in _GLOBAL__sub_I_b (/home/kal/work/cxx/a.out+0x40134b)
#3 0x40142c in __libc_csu_init (/home/kal/work/cxx/a.out+0x40142c)
#4 0x7f43cfb8b00d in __libc_start_main (/lib64/libc.so.6+0x2700d)
#5 0x4010dd in _start (/home/kal/work/cxx/a.out+0x4010dd)
0x000000404160 is located 0 bytes inside of global variable 'g' defined in
'a.cc:5:3' (0x404160) of size 4
registered at:
#0 0x7f43d00b5cc8 (/lib64/libasan.so.6+0x37cc8)
#1 0x401202 in _sub_I_00099_1 (/home/kal/work/cxx/a.out+0x401202)
#2 0x40142c in __libc_csu_init (/home/kal/work/cxx/a.out+0x40142c)
SUMMARY: AddressSanitizer: initialization-order-fiasco
(/home/kal/work/cxx/a.out+0x4013c5) in b::{lambda()#1}::operator()() const
Shadow bytes around the buggy address:
0x0000800787d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0000800787e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0000800787f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x000080078800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x000080078810: 00 00 00 00 f9 f9 f9 f9 f9 f9 f9 f9 00 00 00 00
=>0x000080078820: f9 f9 f9 f9 f9 f9 f9 f9 00 00 00 00[f6]f6 f6 f6
0x000080078830: f6 f6 f6 f6 00 00 00 00 04 f9 f9 f9 f9 f9 f9 f9
0x000080078840: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x000080078850: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x000080078860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x000080078870: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==3844820==ABORTING
More information about the Gcc-bugs
mailing list