core: Document number->string INT-MIN failure with gcc-x86.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 21 Jul 2018 13:20:01 +0000 (15:20 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 21 Jul 2018 13:20:01 +0000 (15:20 +0200)
* src/mes.c (scm_symbol_arch, scm_symbol_compiler): New symbol.
  (mes_symbols, bload_env): Add them.
  (scm_symbol_gnuc, scm_symbol_mesc): Remove.
* scaffold/mini-mes.c: Likewise.
* module/mes/mes-0.scm (%arch, %compiler): New public variable.
* tests/srfi-13.test: Expect number->string INT-MIN to fail for
  gcc-x86.
* HACKING (Bugs): Add it.

HACKING
module/mes/mes-0.scm
scaffold/mini-mes.c
src/mes.c
tests/srfi-13.test

diff --git a/HACKING b/HACKING
index 92a27890508bc70b712ef13c2531c4eeeeaa2923..9a35180a79693040284b02c551b2ce890deda446 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -136,6 +136,10 @@ enough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
 
 
 * Bugs
+** mes: gcc-x86 compiled, tests/srfi-13.test number->string INT-MIN fails:
+test: number->string INT-MIN: fail
+expected: -2147483648
+actual: -./,),(-*,(
 ** tcc: tcc-built lib/libc+tcc.c segfaults with mes, with tcc.
 ** mes: remove pmatch-car/pmatch-cdr hack.
 ** mescc: softcode stack frame size, now hardcoded and very large
index 773c0a1776d6881b63dfd12a1fd3d0cf584f5f59..7e92d664e5cf8b0e82c8da69b51d54b82be9034b 100644 (file)
@@ -35,6 +35,8 @@
             guile?
             guile-1.8?
             guile-2?
+            %arch
+            %compiler
             ))
 
 (define-macro (mes-use-module . rest) #t)
@@ -45,3 +47,5 @@
 (define guile-2? (equal? (major-version) "2"))
 (define EOF (if #f #f))
 (define append2 append)
+(define %arch (car (string-split %host-type #\-)))
+(define %compiler "gcc")
index 59508bdb28fe356d8b56ef6b30a40fd265b864d2..3ade758f146e6cbe2950a30b9305fc982858f5c2 100644 (file)
@@ -195,8 +195,8 @@ struct scm scm_type_variable = {TSYMBOL, "<cell:variable>",0};
 struct scm scm_type_vector = {TSYMBOL, "<cell:vector>",0};
 struct scm scm_type_broken_heart = {TSYMBOL, "<cell:broken-heart>",0};
 
-struct scm scm_symbol_gnuc = {TSYMBOL, "%gnuc",0};
-struct scm scm_symbol_mesc = {TSYMBOL, "%mesc",0};
+struct scm scm_symbol_compiler = {TSYMBOL, "%compiler",0};
+struct scm scm_symbol_arch = {TSYMBOL, "%arch",0};
 
 struct scm scm_test = {TSYMBOL, "test",0};
 
@@ -838,13 +838,19 @@ mes_symbols () ///((internal))
   a = acons (cell_symbol_call_with_current_continuation, cell_call_with_current_continuation, a);
   a = acons (cell_symbol_sc_expand, cell_f, a);
 
-#if __GNUC__
-  a = acons (cell_symbol_gnuc, cell_t, a);
-  a = acons (cell_symbol_mesc, cell_f, a);
-#else
-  a = acons (cell_symbol_gnuc, cell_f, a);
-  a = acons (cell_symbol_mesc, cell_t, a);
+  char *compiler = "gcc";
+#if __MESC__
+  compiler = "mescc";
+#elif __TINYC__
+  compiler = "tcc";
+#endif
+  a = acons (cell_symbol_compiler, MAKE_STRING (cstring_to_list (compiler)), a);
+
+  char *arch = "x86";
+#if __x86_64__
+  arch = "x86_64";
 #endif
+  a = acons (cell_symbol_arch, MAKE_STRING (cstring_to_list (arch)), a);
 
   a = acons (cell_closure, a, a);
 
@@ -918,13 +924,19 @@ bload_env (SCM a) ///((internal))
   g_stdin = STDIN;
   r0 = mes_builtins (r0);
 
-#if __GNUC__
-  set_env_x (cell_symbol_gnuc, cell_t, r0);
-  set_env_x (cell_symbol_mesc, cell_f, r0);
-#else
-  set_env_x (cell_symbol_gnuc, cell_f, r0);
-  set_env_x (cell_symbol_mesc, cell_t, r0);
+  char *compiler = "gcc";
+#if __MESC__
+  compiler = "mescc";
+#elif __TINYC__
+  compiler = "tcc";
+#endif
+  set_env_x (cell_symbol_compiler, MAKE_STRING (cstring_to_list (compiler)), r0);
+
+  char *arch = "x86";
+#if __x86_64__
+  arch = "x86_64";
 #endif
+  set_env_x (cell_symbol_arch, MAKE_STRING (cstring_to_list (arch)), r0);
 
   if (g_debug)
     {
index fe5280a431771baaea8f8397fef55f2bfe7db1ba..0eef233ad7c5d8678e6d5dd70ce1b748373d9260 100644 (file)
--- a/src/mes.c
+++ b/src/mes.c
@@ -235,10 +235,10 @@ struct scm scm_type_variable = {TSYMBOL, "<cell:variable>",0};
 struct scm scm_type_vector = {TSYMBOL, "<cell:vector>",0};
 struct scm scm_type_broken_heart = {TSYMBOL, "<cell:broken-heart>",0};
 
-struct scm scm_symbol_gnuc = {TSYMBOL, "%gnuc",0};
-struct scm scm_symbol_mesc = {TSYMBOL, "%mesc",0};
+struct scm scm_symbol_compiler = {TSYMBOL, "%compiler",0};
+struct scm scm_symbol_arch = {TSYMBOL, "%arch",0};
 
-struct scm scm_test = {TSYMBOL, "test",0};
+struct scm scm_test = {TSYMBOL, "%%test",0};
 
 #if !_POSIX_SOURCE
 #include "mes.mes.symbols.h"
@@ -1830,10 +1830,10 @@ g_free++;
 g_cells[cell_vm_return] = scm_vm_return;
 
 g_free++;
-g_cells[cell_symbol_gnuc] = scm_symbol_gnuc;
+g_cells[cell_symbol_compiler] = scm_symbol_compiler;
 
 g_free++;
-g_cells[cell_symbol_mesc] = scm_symbol_mesc;
+g_cells[cell_symbol_arch] = scm_symbol_arch;
 
 g_free++;
 g_cells[cell_test] = scm_test;
@@ -1948,8 +1948,8 @@ g_cells[cell_vm_call_with_values2].car = g_cells[cell_vm_evlis].car;
 g_cells[cell_vm_call_with_current_continuation2].car = g_cells[cell_vm_evlis].car;
 g_cells[cell_vm_return].car = g_cells[cell_vm_evlis].car;
 
-g_cells[cell_symbol_gnuc].car = cstring_to_list (scm_symbol_gnuc.name);
-g_cells[cell_symbol_mesc].car = cstring_to_list (scm_symbol_mesc.name);
+g_cells[cell_symbol_compiler].car = cstring_to_list (scm_symbol_compiler.name);
+g_cells[cell_symbol_arch].car = cstring_to_list (scm_symbol_arch.name);
 g_cells[cell_test].car = cstring_to_list (scm_test.name);
 ////////////////// gc
 
@@ -1967,13 +1967,20 @@ g_cells[cell_test].car = cstring_to_list (scm_test.name);
   a = acons (cell_symbol_mes_version, MAKE_STRING (cstring_to_list (VERSION)), a);
   a = acons (cell_symbol_mes_prefix, MAKE_STRING (cstring_to_list (PREFIX)), a);
 
-#if __GNUC__
-  a = acons (cell_symbol_gnuc, cell_t, a);
-  a = acons (cell_symbol_mesc, cell_f, a);
-#else
-  a = acons (cell_symbol_gnuc, cell_f, a);
+  char *compiler = "gcc";
+#if __MESC__
+  compiler = "mescc";
+#elif __TINYC__
+  compiler = "tcc";
+#endif
+  a = acons (cell_symbol_compiler, MAKE_STRING (cstring_to_list (compiler)), a);
 
+  char *arch = "x86";
+#if __x86_64__
+  arch = "x86_64";
 #endif
+  a = acons (cell_symbol_arch, MAKE_STRING (cstring_to_list (arch)), a);
+
 #endif // !MES_MINI
 
   a = acons (cell_type_char, MAKE_NUMBER (TCHAR), a);
@@ -2329,13 +2336,19 @@ bload_env (SCM a) ///((internal))
   g_stdin = STDIN;
   r0 = mes_builtins (r0);
 
-#if __GNUC__
-  set_env_x (cell_symbol_gnuc, cell_t, r0);
-  set_env_x (cell_symbol_mesc, cell_f, r0);
-#else
-  set_env_x (cell_symbol_gnuc, cell_f, r0);
-  set_env_x (cell_symbol_mesc, cell_t, r0);
+  char *compiler = "gcc";
+#if __MESC__
+  compiler = "mescc";
+#elif __TINYC__
+  compiler = "tcc";
+#endif
+  a = acons (cell_symbol_compiler, MAKE_STRING (cstring_to_list (compiler)), a);
+
+  char *arch = "x86";
+#if __x86_64__
+  arch = "x86_64";
 #endif
+  a = acons (cell_symbol_arch, MAKE_STRING (cstring_to_list (arch)), a);
 
   if (g_debug > 3)
     {
index 527c0e17d27198f189711e14ce6412f0c86aafc3..1a446c7045f736322478daaa4343e42686e40a22 100755 (executable)
@@ -108,4 +108,4 @@ exec ${MES-src/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests
 (pass-if-equal "string-replace" "fubar"
              (string-replace "foobar" "u" 1 3))
 
-(result 'report)
+(result 'report (if (and (equal? %compiler "gcc") (equal? %arch "x86")) 1 0))