https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80590

--- Comment #13 from Tom de Vries <vries at gcc dot gnu.org> ---
(In reply to Tom de Vries from comment #12)
> and g-exptty.adb is still one of the problematic files:

When running in the debugger, instead I run into a sigsegv in strlen instead of
a hang:
...
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff67811e2 in ?? () from /lib/libc.so.6
(gdb) bt
#0  0x00007ffff67811e2 in ?? () from /lib/libc.so.6
#1  0x00000000026af8b5 in libiberty_vprintf_buffer_size (format=0x26c112b
"%s:%d", args=0x7fffffffbe10)
    at libiberty/vprintf-support.c:105
#2  0x00000000026af607 in xvasprintf (format=0x26c112b "%s:%d",
args=0x7fffffffbe10)
    at libiberty/xvasprintf.c:57
#3  0x00000000026af24f in xasprintf (fmt=0x26c112b "%s:%d")
    at libiberty/xasprintf.c:47
#4  0x00000000008b689e in internal_error_function (context=0x3a2dd60
<global_diagnostic_context>, 
    msgid=0x2e2baff "in %s, at %s:%d", ap=0x7fffffffc180)
    at gcc/ada/gcc-interface/misc.c:336
#5  0x00000000026147d5 in diagnostic_report_diagnostic (context=0x3a2dd60
<global_diagnostic_context>, 
    diagnostic=0x7fffffffc080) at gcc/diagnostic.c:965
#6  0x0000000002614e3f in diagnostic_impl(rich_location *, int, const char *,
va_list *, <anonymous enum>) (
    richloc=0x7fffffffc0f0, opt=-1, gmsgid=0x2e2baff "in %s, at %s:%d",
ap=0x7fffffffc180, kind=DK_ICE)
    at gcc/diagnostic.c:1099
#7  0x00000000026163ef in internal_error (gmsgid=0x2e2baff "in %s, at %s:%d")
    at gcc/diagnostic.c:1422
#8  0x0000000002616673 in fancy_abort (
    file=0x26bec90 "gcc/ada/raise.c", line=87, 
    function=0x26bede0 <__gnat_eh_personality::__FUNCTION__>
"__gnat_eh_personality")
    at gcc/diagnostic.c:1488
#9  0x000000000087e9de in __gnat_eh_personality ()
    at gcc/ada/raise.c:87
#10 0x00007ffff69eda43 in _Unwind_RaiseException (exc=0x3bd6d60)
    at /scratch/gcc/w/gcc-4.7.3/linux/gcc-2012.09-90/libgcc/unwind.inc:113
#11 0x000000000087fc3f in __gnat_Unwind_RaiseException (e=0x3bd6d60)
    at gcc/ada/raise-gcc.c:1427
#12 0x000000000094e98a in
ada.exceptions.exception_propagation.propagate_gcc_exception
(gcc_exception=0x0)
    at gcc/ada/libgnat/a-exexpr.adb:322
#13 0x000000000094e9c1 in
ada.exceptions.exception_propagation.propagate_exception (excep=<optimized
out>)
    at gcc/ada/libgnat/a-exexpr.adb:354
#14 0x000000000094e9e3 in ada.exceptions.complete_and_propagate_occurrence
(x=0x3bd6da0)
    at gcc/ada/libgnat/a-except.adb:937
#15 0x000000000094f9dc in <__gnat_raise_exception> (e=0x337fb00
<rtsfind.re_not_available>, message=...)
    at gcc/ada/libgnat/a-except.adb:978
#16 0x0000000000b68531 in rtsfind.load_fail (s=...,
u_id=system_relative_delays, id=ro_rd_delay_for)
    at gcc/ada/rtsfind.adb:851
#17 0x0000000000b68724 in rtsfind.load_rtu (u_id=system_relative_delays,
id=ro_rd_delay_for, use_setting=false)
    at gcc/ada/rtsfind.adb:987
#18 0x0000000000b69839 in rtsfind.rte ()
    at gcc/ada/rtsfind.adb:1380
#19 0x0000000000b69d6d in rtsfind.rte_available (e=ro_rd_delay_for)
    at gcc/ada/rtsfind.adb:1462
#20 0x0000000000a52ac3 in exp_ch9.expand_n_delay_relative_statement (n=2465)
    at gcc/ada/exp_ch9.adb:8089
#21 0x0000000000ab551c in expander.expand (n=2465)
    at gcc/ada/expander.adb:214
#22 0x0000000000b97fd0 in sem.analyze (n=2465)
    at gcc/ada/sem.adb:765
#23 0x0000000000c4575b in sem_ch5.analyze_statements (l=-99999961)
    at gcc/ada/sem_ch5.adb:3637
#24 0x0000000000c4208b in sem_ch5.analyze_if_statement (n=2450)
    at gcc/ada/sem_ch5.adb:1686
#25 0x0000000000b9770b in sem.analyze (n=2450)
    at gcc/ada/sem.adb:306
#26 0x0000000000c4575b in sem_ch5.analyze_statements (l=-99999963)
    at gcc/ada/sem_ch5.adb:3637
#27 0x0000000000bca547 in sem_ch11.analyze_handled_statements (n=2449)
    at gcc/ada/sem_ch11.adb:426
#28 0x0000000000b976d5 in sem.analyze (n=2449)
    at gcc/ada/sem.adb:297
#29 0x0000000000c4bb6c in sem_ch6.analyze_subprogram_body_helper ()
    at gcc/ada/sem_ch6.adb:4356
#30 0x0000000000c4a1c0 in sem_ch6.analyze_subprogram_body (n=2335)
    at gcc/ada/sem_ch6.adb:2349
#31 0x0000000000b97cb2 in sem.analyze (n=2335)
    at gcc/ada/sem.adb:547
#32 0x0000000000c07d04 in sem_ch3.analyze_declarations (l=-99999984)
    at gcc/ada/sem_ch3.adb:2608
#33 0x0000000000c5bb92 in sem_ch7.analyze_package_body_helper (n=2296)
    at gcc/ada/sem_ch7.adb:857
#34 0x0000000000c5b15b in sem_ch7.analyze_package_body (n=2296)
    at gcc/ada/sem_ch7.adb:180
#35 0x0000000000b97a47 in sem.analyze (n=2296)
    at gcc/ada/sem.adb:444
#36 0x0000000000bc09c2 in sem_ch10.analyze_compilation_unit (n=2269)
    at gcc/ada/sem_ch10.adb:889
#37 0x0000000000b97417 in sem.analyze (n=2269)
    at gcc/ada/sem.adb:180
#38 0x0000000000b98b9b in sem.semantics.do_analyze ()
    at gcc/ada/sem.adb:1350
#39 0x0000000000b98fce in sem.semantics ()
    at gcc/ada/sem.adb:1532
#40 0x0000000000acdbef in frontend ()
    at gcc/ada/frontend.adb:409
#41 0x0000000000d93fde in gnat1drv ()
    at gcc/ada/gnat1drv.adb:1140
#42 0x00000000008b61e1 in gnat_parse_file ()
    at gcc/ada/gcc-interface/misc.c:122
#43 0x0000000001530cad in compile_file ()
    at gcc/toplev.c:456
#44 0x00000000015333af in do_compile () at gcc/toplev.c:2037
#45 0x000000000153374f in toplev::main (this=0x7fffffffde40, argc=21,
argv=0x7fffffffdf48)
    at gcc/toplev.c:2172
#46 0x00000000025f529b in main (argc=21, argv=0x7fffffffdf48)
    at gcc/main.c:39
...

which I can trace back to:
...
(gdb) up
#4  0x00000000008b689e in internal_error_function (context=0x3a2dd60
<global_diagnostic_context>, 
    msgid=0x2e2baff "in %s, at %s:%d", ap=0x7fffffffc180)
    at gcc/ada/gcc-interface/misc.c:336
336         loc = xasprintf ("%s:%d", xloc.file, xloc.line);
(gdb) p xloc.file
$10 = 0x0
...

Something like this would fix it:
...
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index 081a63a..1d5a476 100644
--- a/gcc/ada/gcc-interface/misc.c
+++ b/gcc/ada/gcc-interface/misc.c
@@ -330,6 +330,8 @@ internal_error_function (diagnostic_context *context, const
char *msgid,
   sp.Array = buffer;

   xloc = expand_location (input_location);
+  if (!xloc.file)
+    xloc.file = "<unknown>";
   if (context->show_column && xloc.column != 0)
     loc = xasprintf ("%s:%d:%d", xloc.file, xloc.line, xloc.column);
   else
...

Reply via email to