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