xref: /netbsd-src/external/gpl3/gcc/dist/libcody/fatal.cc (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 // CODYlib		-*- mode:c++ -*-
2 // Copyright (C) 2019-2020 Nathan Sidwell, nathan@acm.org
3 // License: Apache v2.0
4 
5 // Cody
6 #include "internal.hh"
7 // C
8 #include <csignal>
9 #include <cstdint>
10 #include <cstdio>
11 #include <cstdlib>
12 #include <cstring>
13 
14 namespace Cody {
15 
16 #if NMS_CHECKING
17 void (AssertFailed) (Location loc) noexcept
18 {
19   (HCF) ("assertion failed", loc);
20 }
21 void (Unreachable) (Location loc) noexcept
22 {
23   (HCF) ("unreachable reached", loc);
24 }
25 #endif
26 
27 void (HCF) (char const *msg
28 #if NMS_CHECKING
29 	  , Location const loc
30 #endif
31 	  ) noexcept
32 { // HCF - you goofed!
33 
34 #if !NMS_CHECKING
35   constexpr Location loc (nullptr, 0);
36 #endif
37 
38   fprintf (stderr, "CODYlib: %s", msg ? msg : "internal error");
39   if (char const *file = loc.File ())
40     {
41       char const *src = SRCDIR;
42 
43       if (src[0])
44 	{
45 	  size_t l = strlen (src);
46 
47 	  if (!strncmp (src, file, l) && file[l] == '/')
48 	    file += l + 1;
49 	}
50       fprintf (stderr, " at %s:%u", file, loc.Line ());
51     }
52   fprintf (stderr, "\n");
53   raise (SIGABRT);
54   exit (2);
55 }
56 
57 }
58