https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78531
--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > hmm, that doesn't look better: > > Breakpoint 1, __GI___fortify_fail (msg=msg@entry=0x7ffff69f487d "buffer > overflow detected") > at fortify_fail.c:28 > 28 fortify_fail.c: No such file or directory. > (gdb) bt > #0 __GI___fortify_fail (msg=msg@entry=0x7ffff69f487d "buffer overflow > detected") at fortify_fail.c:28 > #1 0x00007ffff6980240 in __GI___chk_fail () at chk_fail.c:28 > #2 0x00000000006f7716 in build_raise_check(int, exception_info_kind) () > #3 0x0000000000706119 in gigi () > #4 0x00000000009e8c90 in back_end.call_back_end () > #5 0x00000000009e9af7 in gnat1drv () > #6 0x00000000006c89ed in gnat_parse_file() () > #7 0x0000000000d791cf in compile_file() () > #8 0x00000000006acc7f in toplev::main(int, char**) () > #9 0x00000000006aeff7 in main () A little better though, thanks. I guess it's this declaration in namet.h: /* The global name buffer. */ struct Bounded_String { Nat Max_Length; Nat Length; char Chars[1]; /* The 1 here is wrong, but it doesn't matter, because all the code either goes by Length, or NUL-terminates the string before processing it. */ }; I thought this was a well-known allocation idiom in C++ because you don't have flexible array members, do you? That being said, I can put the real value.