* 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-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
* 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
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 public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).