all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#8751: 24.0.50; CCL is broken
@ 2011-05-28 12:49 Kazuhiro Ito
  2011-05-30 13:09 ` Kazuhiro Ito
  2011-05-30 16:01 ` Stefan Monnier
  0 siblings, 2 replies; 8+ messages in thread
From: Kazuhiro Ito @ 2011-05-28 12:49 UTC (permalink / raw)
  To: 8751

Below code raises error "Error in CCL program at 4th code" on trunk.

(progn
  (define-ccl-program ccl-test
    '(1 (loop
	 (read r0)
	 (write-repeat r0))))
  (ccl-execute-on-string 'ccl-test (make-vector 9 0) "_"))

-- 
Kazuhiro Ito





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-28 12:49 bug#8751: 24.0.50; CCL is broken Kazuhiro Ito
@ 2011-05-30 13:09 ` Kazuhiro Ito
  2011-05-30 16:04   ` Stefan Monnier
  2011-05-30 16:01 ` Stefan Monnier
  1 sibling, 1 reply; 8+ messages in thread
From: Kazuhiro Ito @ 2011-05-30 13:09 UTC (permalink / raw)
  To: 8751

The problem may be that ccl-compiler produce negative integer as CCL
code (at latest, since Emacs21).

(ccl-compile
 '(1 (loop
      (read r0)
      (write-repeat r0))))

-> [1 4 14 -506 22]
           ~~~~

But the document of ccl.c says "CCL code is a sequence of 28-bit
non-negative integers", and current ccl.c does not accept such
negative value.  I don't know which whould be changed, ccl-compiler or
document and current ccl.c.

Kazuhiro Ito wrote:
>
> Below code raises error "Error in CCL program at 4th code" on trunk.
> 
> (progn
>   (define-ccl-program ccl-test
>     '(1 (loop
> 	 (read r0)
> 	 (write-repeat r0))))
>   (ccl-execute-on-string 'ccl-test (make-vector 9 0) "_"))

-- 
Kazuhiro Ito





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-28 12:49 bug#8751: 24.0.50; CCL is broken Kazuhiro Ito
  2011-05-30 13:09 ` Kazuhiro Ito
@ 2011-05-30 16:01 ` Stefan Monnier
  1 sibling, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2011-05-30 16:01 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Kazuhiro Ito, 8751

Paul, can you take a look at this?  It seems this was introduced very
recently, probably by

	* ccl.c (ccl_driver): Redo slightly to avoid the need for 'unsigned'.

	ccl: add integer overflow checks
	* ccl.c (CCL_CODE_MAX, GET_CCL_RANGE, GET_CCL_CODE, GET_CCL_INT):
	(IN_INT_RANGE): New macros.
	(ccl_driver): Use them to check for integer overflow when
	decoding a CCL program.  Many of the new checks are whether XINT (x)
	fits in int; it doesn't always, on 64-bit hosts.  The new version
	doesn't catch all possible integer overflows, but it's an
	improvement.  (Bug#8719)


-- Stefan


>>>>> "Kazuhiro" == Kazuhiro Ito <kzhr@d1.dion.ne.jp> writes:

> Below code raises error "Error in CCL program at 4th code" on trunk.
> (progn
>   (define-ccl-program ccl-test
>     '(1 (loop
> 	 (read r0)
> 	 (write-repeat r0))))
>   (ccl-execute-on-string 'ccl-test (make-vector 9 0) "_"))

> -- 
> Kazuhiro Ito







^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-30 13:09 ` Kazuhiro Ito
@ 2011-05-30 16:04   ` Stefan Monnier
  2011-05-30 23:26     ` Kazuhiro Ito
  0 siblings, 1 reply; 8+ messages in thread
From: Stefan Monnier @ 2011-05-30 16:04 UTC (permalink / raw)
  To: Kazuhiro Ito; +Cc: 8751

> The problem may be that ccl-compiler produce negative integer as CCL
> code (at latest, since Emacs21).

The negative number is normal (it's due to the relative instruction
address for the backward jump at the end of the loop).  The problem must
be in the ccl.c code.


        Stefan





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-30 16:04   ` Stefan Monnier
@ 2011-05-30 23:26     ` Kazuhiro Ito
  2011-05-31  2:16       ` bug#8719: " Paul Eggert
  2011-05-31  5:12       ` Kenichi Handa
  0 siblings, 2 replies; 8+ messages in thread
From: Kazuhiro Ito @ 2011-05-30 23:26 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Paul Eggert, 8751


> > The problem may be that ccl-compiler produce negative integer as CCL
> > code (at latest, since Emacs21).
> 
> The negative number is normal (it's due to the relative instruction
> address for the backward jump at the end of the loop).  The problem must
> be in the ccl.c code.

If that is right (and I think so, too), the comment of ccl.c should be
fixed.

> /* CCL code is a sequence of 28-bit non-negative integers (i.e. the
                                      ~~~~~~~~~~~~
>    MSB is always 0), each contains CCL command and/or arguments in the
>    following format:
>
> 	|----------------- integer (28-bit) ------------------|
> 	|------- 17-bit ------|- 3-bit --|- 3-bit --|- 5-bit -|
> 	|--constant argument--|-register-|-register-|-command-|
> 	   ccccccccccccccccc      RRR        rrr       XXXXX
>   or
> 	|------- relative address -------|-register-|-command-|
> 	       cccccccccccccccccccc          rrr       XXXXX
>   or
> 	|------------- constant or other args ----------------|
>                      cccccccccccccccccccccccccccc
>
>    where, `cc...c' is a non-negative integer indicating constant value
                          ~~~~~~~~~~~~
>    (the left most `c' is always 0) or an absolute jump address, `RRR'
>    and `rrr' are CCL register number, `XXXXX' is one of the following
>    CCL commands.  */


Here is a quick fix for actual code, but I don't check whether there
is other problems.

=== modified file 'src/ccl.c'
--- src/ccl.c	2011-05-27 21:24:11 +0000
+++ src/ccl.c	2011-05-30 22:19:52 +0000
@@ -100,6 +100,7 @@
    CCL commands.  */
 
 #define CCL_CODE_MAX ((1 << (28 - 1)) - 1)
+#define CCL_CODE_MIN (- CCL_CODE_MAX - 1)
 
 /* CCL commands
 
@@ -756,7 +757,7 @@
   while (0)
 
 #define GET_CCL_CODE(code, ccl_prog, ic)			\
-  GET_CCL_RANGE (code, ccl_prog, ic, 0, CCL_CODE_MAX)
+  GET_CCL_RANGE (code, ccl_prog, ic, CCL_CODE_MIN, CCL_CODE_MAX)
 
 #define GET_CCL_INT(var, ccl_prog, ic)				\
   GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX)


-- 
Kazuhiro Ito





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8719: bug#8751: 24.0.50; CCL is broken
  2011-05-30 23:26     ` Kazuhiro Ito
@ 2011-05-31  2:16       ` Paul Eggert
  2011-05-31  5:12       ` Kenichi Handa
  1 sibling, 0 replies; 8+ messages in thread
From: Paul Eggert @ 2011-05-31  2:16 UTC (permalink / raw)
  To: Kazuhiro Ito; +Cc: 8719, 8751-done

> Here is a quick fix for actual code, but I don't check whether there
> is other problems.

Thanks, I came up with something similar independently, and installed
a fix into the trunk (bzr 104441).  This fix adjusted the comment as
best I could.

Bug#8719 and Bug#8751 are related so I'll CC: this to bug 8719 to give
Kenichi Handa a heads-up.





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-30 23:26     ` Kazuhiro Ito
  2011-05-31  2:16       ` bug#8719: " Paul Eggert
@ 2011-05-31  5:12       ` Kenichi Handa
  2011-05-31  5:39         ` Paul Eggert
  1 sibling, 1 reply; 8+ messages in thread
From: Kenichi Handa @ 2011-05-31  5:12 UTC (permalink / raw)
  To: Kazuhiro Ito; +Cc: eggert, 8751

Sorry for the late response on this matter.

In article <20110530232630.273942C803A@msa105.auone-net.jp>, Kazuhiro Ito <kzhr@d1.dion.ne.jp> writes:

> > > The problem may be that ccl-compiler produce negative integer as CCL
> > > code (at latest, since Emacs21).
> > 
> > The negative number is normal (it's due to the relative instruction
> > address for the backward jump at the end of the loop).  The problem must
> > be in the ccl.c code.

> If that is right (and I think so, too), the comment of ccl.c should be
> fixed.

> > /* CCL code is a sequence of 28-bit non-negative integers (i.e. the

Yes, this comment is wrong.  It seems that I have forgotten
to update it when I changed CCL to accept negative integer.

> Here is a quick fix for actual code, but I don't check whether there
> is other problems.

> === modified file 'src/ccl.c'
> --- src/ccl.c	2011-05-27 21:24:11 +0000
> +++ src/ccl.c	2011-05-30 22:19:52 +0000
> @@ -100,6 +100,7 @@
>     CCL commands.  */
 
>  #define CCL_CODE_MAX ((1 << (28 - 1)) - 1)
> +#define CCL_CODE_MIN (- CCL_CODE_MAX - 1)
 
>  /* CCL commands
 
> @@ -756,7 +757,7 @@
>    while (0)
 
>  #define GET_CCL_CODE(code, ccl_prog, ic)			\
> -  GET_CCL_RANGE (code, ccl_prog, ic, 0, CCL_CODE_MAX)
> +  GET_CCL_RANGE (code, ccl_prog, ic, CCL_CODE_MIN, CCL_CODE_MAX)
 
>  #define GET_CCL_INT(var, ccl_prog, ic)				\
>    GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX)

Sorry but I still don't have a time to check the recent
change.  If the above patch fixes the code to match with the
following revised comment, it is the right patch.

/* CCL code is a sequence of 28-bit integers, each contains CCL
   command and/or arguments in the following format:

	|----------------- integer (28-bit) ------------------|
	|------- 17-bit ------|- 3-bit --|- 3-bit --|- 5-bit -|
	|--constant argument--|-register-|-register-|-command-|
	   ccccccccccccccccc      RRR        rrr       XXXXX
  or
	|------- relative address -------|-register-|-command-|
	       cccccccccccccccccccc          rrr       XXXXX
  or
	|------------- constant or other args ----------------|
                     cccccccccccccccccccccccccccc

   where, `cc...c' is a 17-bit, 20-bit, or 28-bit integer indicating a
   constant value or a relative/absolute jump address, `RRR' and `rrr'
   are CCL register number, `XXXXX' is one of the following CCL
   command codes.  */

---
Kenichi Handa
handa@m17n.org





^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#8751: 24.0.50; CCL is broken
  2011-05-31  5:12       ` Kenichi Handa
@ 2011-05-31  5:39         ` Paul Eggert
  0 siblings, 0 replies; 8+ messages in thread
From: Paul Eggert @ 2011-05-31  5:39 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: 8751

On 05/30/11 22:12, Kenichi Handa wrote:
> If the above patch fixes the code to match with the
> following revised comment, it is the right patch.

Thanks, I put that comment in, as bzr 104445.





^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2011-05-31  5:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-05-28 12:49 bug#8751: 24.0.50; CCL is broken Kazuhiro Ito
2011-05-30 13:09 ` Kazuhiro Ito
2011-05-30 16:04   ` Stefan Monnier
2011-05-30 23:26     ` Kazuhiro Ito
2011-05-31  2:16       ` bug#8719: " Paul Eggert
2011-05-31  5:12       ` Kenichi Handa
2011-05-31  5:39         ` Paul Eggert
2011-05-30 16:01 ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.