Blob Blame History Raw
diff -up clisp-2.49.93/src/control.d.volatile clisp-2.49.93/src/control.d
--- clisp-2.49.93/src/control.d.volatile	2018-02-26 11:22:55.000000000 -0500
+++ clisp-2.49.93/src/control.d	2018-02-26 11:31:38.737088256 -0500
@@ -1602,7 +1602,7 @@ LISPFUN(maplap,seclass_default,2,0,rest,
 
 LISPSPECFORM(tagbody, 0,0,body)
 { /* (TAGBODY {tag | statement}), CLTL p. 130 */
-  var object body = popSTACK();
+  var volatile object body = popSTACK();
   { /* build GENV-frame: */
     var gcv_object_t* top_of_frame = STACK; /* pointer to frame */
     pushSTACK(aktenv.go_env);
diff -up clisp-2.49.93/src/eval.d.volatile clisp-2.49.93/src/eval.d
--- clisp-2.49.93/src/eval.d.volatile	2018-02-26 11:22:55.000000000 -0500
+++ clisp-2.49.93/src/eval.d	2018-02-26 11:32:25.995960520 -0500
@@ -708,10 +708,10 @@ global void throw_to (object tag) {
 global maygc void invoke_handlers (object cond) {
   /* Also deactivates the handler being called, and all newer handlers.
      the handler-ranges, which are screened off: */
-  var stack_range_t* other_ranges = inactive_handlers;
+  var stack_range_t* volatile other_ranges = inactive_handlers;
   var stack_range_t new_range;
   /* Search for Handler-Frame, that handles a Type with (TYPEP cond type): */
-  var gcv_object_t* FRAME = STACK;
+  var gcv_object_t* volatile FRAME = STACK;
   while (1) {
     /* search in Stack starting at FRAME for a suitable HANDLER-Frame: */
     if (!(other_ranges == NULL) && (FRAME == other_ranges->low_limit)) {
@@ -725,7 +725,7 @@ global maygc void invoke_handlers (objec
       if (frame_info == HANDLER_frame_info || frame_info == C_HANDLER_frame_info) { /* Handler-Frame? */
         /* loop over types of the vectors #(type1 label1 ... typem labelm): */
         var uintL m2 = Svector_length(Car(FRAME_(frame_handlers))); /* 2*m */
-        var uintL i = 0;
+        var volatile uintL i = 0;
         do {
           pushSTACK(cond); /* save cond */
           pushSTACK(cond);
@@ -2432,7 +2432,7 @@ local maygc void trace_call (object fun,
     /* But ':ALLOW-OTHER-KEYS NIL' hides a subsequent ':ALLOW-OTHER-KEYS T' \
      (see CLHS 3.4.1.4.1.1). */                                         \
     var bool allow_hidden = false; /* true if seen ':ALLOW-OTHER-KEYS NIL' */ \
-    var uintC check_count=argcount;                                     \
+    var volatile uintC check_count=argcount;                            \
     while (check_count--) {                                             \
       var object kw = NEXT(argptr);                /* next Argument */  \
       var object val = NEXT(argptr);            /* and value for it */  \
@@ -2475,7 +2475,7 @@ local maygc void trace_call (object fun,
  > found_statement: what is to be done, if value found */
 #define find_keyword_value(notfound_statement,found_statement)          \
   { var gcv_object_t* argptr = rest_args_pointer;                       \
-    var uintC find_count;                                               \
+    var volatile uintC find_count;                                      \
     dotimesC(find_count,argcount, {                                     \
       if (eq(NEXT(argptr),keyword)) goto kw_found; /* right keyword? */ \
       argptr skipSTACKop -1;   /* NEXT */                               \
@@ -2494,8 +2494,9 @@ local maygc void trace_call (object fun,
  < mv_count/mv_space: values
  < STACK: cleaned up, = args_pointer
  can trigger GC */
-local maygc Values funcall_iclosure (object closure, gcv_object_t* args_pointer,
-                                     uintC argcount)
+local maygc Values funcall_iclosure (volatile object closure,
+                                     gcv_object_t* args_pointer,
+                                     volatile uintC argcount)
 {
   /* 1st step: finish building of APPLY-frame: */
   var sp_jmp_buf my_jmp_buf;
@@ -2683,7 +2684,7 @@ local maygc Values funcall_iclosure (obj
         pushSTACK(NIL); /* start of list */
         if (argcount>0) {
           var gcv_object_t* ptr = args_pointer STACKop -(uintP)argcount;
-          var uintC count;
+          var volatile uintC count;
           dotimespC(count,argcount, {
             var object new_cons = allocate_cons();
             Car(new_cons) = BEFORE(ptr);
@@ -2698,7 +2699,7 @@ local maygc Values funcall_iclosure (obj
       /* process &KEY-parameters: */
       if (!numberp(TheIclosure(closure)->clos_keywords)) {
         /* Keyword-parameters present */
-        var gcv_object_t* rest_args_pointer = args_pointer;
+        var gcv_object_t* volatile rest_args_pointer = args_pointer;
         /* argcount = number of remaining arguments */
         /* halve argcount --> number of pairs Key.Value: */
         if (argcount%2) { /* number was odd -> not paired: */
@@ -2970,7 +2971,7 @@ local Values eval_ffunction (object fun)
  > form: form
  < mv_count/mv_space: values
  can trigger GC */
-modexp maygc Values eval (object form)
+modexp maygc Values eval (volatile object form)
 {
  start:
   /* Test for Keyboard-Interrupt: */
@@ -3025,7 +3026,7 @@ modexp maygc Values eval (object form)
  > form: Form
  < mv_count/mv_space: values
  can trigger GC */
-global maygc Values eval_no_hooks (object form) {
+global maygc Values eval_no_hooks (volatile object form) {
   var sp_jmp_buf my_jmp_buf;
   /* build EVAL-Frame: */
   {
@@ -5769,7 +5770,8 @@ local maygc Values funcall_closure (obje
   #define GOTO_ERROR(label)  goto label
   #define DEBUG_CHECK_BYTEPTR(b)     do{}while(0)
 #endif
-local /*maygc*/ Values interpret_bytecode_ (object closure_in, Sbvector codeptr,
+local /*maygc*/ Values interpret_bytecode_ (volatile object closure_in,
+                                            volatile Sbvector codeptr,
                                             const uintB* byteptr_in)
 {
   GCTRIGGER_IF(true, {
@@ -5798,7 +5800,7 @@ local /*maygc*/ Values interpret_bytecod
  #endif
   TRACE_CALL(closure,'B','C');
   /* situate closure in STACK, below the arguments: */
-  var gcv_object_t* closureptr = (pushSTACK(closure), &STACK_0);
+  var gcv_object_t* volatile closureptr = (pushSTACK(closure), &STACK_0);
  #ifndef FAST_SP
   /* If there is no fast SP-Access, one has to introduce
    an extra pointer: */
diff -up clisp-2.49.93/src/lispbibl.d.volatile clisp-2.49.93/src/lispbibl.d
--- clisp-2.49.93/src/lispbibl.d.volatile	2018-02-26 11:22:55.000000000 -0500
+++ clisp-2.49.93/src/lispbibl.d	2018-02-26 11:31:38.742088137 -0500
@@ -11836,7 +11836,7 @@ All other long words on the LISP-Stack a
     #define FAST_SP
   #endif
 #elif defined(GNU) && defined(SP_register)
-  register __volatile__ aint __SP __asm__(SP_register);
+  register aint __SP __asm__(SP_register);
   #ifdef SPARC64
     #define SP()  (__SP+2048)
   #else
diff -up clisp-2.49.93/src/record.d.volatile clisp-2.49.93/src/record.d
--- clisp-2.49.93/src/record.d.volatile	2018-02-26 11:22:56.000000000 -0500
+++ clisp-2.49.93/src/record.d	2018-02-26 11:31:38.743088113 -0500
@@ -1406,7 +1406,7 @@ LISPFUNNR(punbound,0) { /* not Foldable
  > obj: the same CLOS instance, not a forward pointer
  < result: the same CLOS instance, not a forward pointer
  can trigger GC */
-global maygc object update_instance (object user_obj, object obj) {
+global maygc object update_instance (object user_obj, volatile object obj) {
   /* Note about the handling of multiple consecutive class redefinitions:
      When there are multiple class redefinitions before an instance gets to
      be updated, we call UPDATE-INSTANCE-FOR-REDEFINED-CLASS once for each
diff -up clisp-2.49.93/src/spvw.d.volatile clisp-2.49.93/src/spvw.d
--- clisp-2.49.93/src/spvw.d.volatile	2018-02-26 11:22:55.000000000 -0500
+++ clisp-2.49.93/src/spvw.d	2018-02-26 11:31:38.743088113 -0500
@@ -3888,7 +3888,7 @@ local inline void main_actions (struct a
     var gcv_object_t* top_of_frame = STACK; /* pointer over frame */
     var sp_jmp_buf returner; /* return point */
     var const char* const* fileptr = &p->argv_init_files[0];
-    var uintL count = p->argv_init_filecount;
+    var volatile uintL count = p->argv_init_filecount;
     finish_entry_frame(DRIVER,returner,,goto done_driver_init_files;);
     do {
       pushSTACK(asciz_to_string(*fileptr++,O(misc_encoding)));
@@ -3906,8 +3906,8 @@ local inline void main_actions (struct a
     if (p->argv_compile_filecount > 0) {
       var gcv_object_t* top_of_frame = STACK; /* pointer over frame */
       var sp_jmp_buf returner; /* return point */
-      var const argv_compile_file_t* fileptr = &p->argv_compile_files[0];
-      var uintL count = p->argv_compile_filecount;
+      var const argv_compile_file_t* volatile fileptr = &p->argv_compile_files[0];
+      var volatile uintL count = p->argv_compile_filecount;
       finish_entry_frame(DRIVER,returner,,goto done_driver_compile_files;);
       do {
         var uintC argcount = 1;
diff -up clisp-2.49.93/src/stream.d.volatile clisp-2.49.93/src/stream.d
--- clisp-2.49.93/src/stream.d.volatile	2018-02-26 11:22:56.000000000 -0500
+++ clisp-2.49.93/src/stream.d	2018-02-26 11:31:38.746088041 -0500
@@ -5875,7 +5875,7 @@ local maygc void clear_output_unbuffered
  close_ochannel(stream, abort);
  > stream : Channel-Stream
  > abort: flag: non-0 => ignore errors */
-local maygc void close_ochannel (object stream, uintB abort) {
+local maygc void close_ochannel (volatile object stream, uintB abort) {
   pushSTACK(stream);
   MAYBE_IGNORE_ERRORS(abort,oconv_unshift_output_unbuffered(stream));
   stream = STACK_0;
@@ -8358,7 +8358,7 @@ local void closed_buffered (object strea
  > stream : File-Stream.
  > abort: flag: non-0 => ignore errors
  changed in stream: all Components except name and truename */
-local maygc void close_buffered (object stream, uintB abort) {
+local maygc void close_buffered (volatile object stream, uintB abort) {
   /* Handle=NIL (Stream already closed) -> finished: */
   if (nullp(BufferedStream_channel(stream)))
     return;
@@ -9326,7 +9326,7 @@ local maygc char** lisp_completion (char
       }
       sstring_un_realloc(m);
       var uintL charcount = Sstring_length(m);
-      var const chart* ptr1;
+      var const chart* volatile ptr1;
       unpack_sstring_alloca(m,charcount,0, ptr1=);
       { /* (CATCH 'SYS::CONVERSION-FAILURE ...) */
         var gcv_object_t* top_of_frame = STACK;