[Tarantool-patches] [PATCH luajit] FFI: Add tonumber() specialization for failed conversions.

sergos sergos at tarantool.org
Wed Sep 21 15:19:40 MSK 2022


Hi!

I see four ‘ok’s as a result of run. 
See the full output for the run with dump() below:


s.ostanevich at s-ostanevich2:~/workspaces/t.sergos/third_party/luajit/test/tarantool-tests % ../../../../build-debug/src/tarantool -e 'require"jit.dump".start("ib")' lj-408-tonumber-cdata-record.test.lua

TAP version 13
1..4
---- TRACE 1 start lj-408-tonumber-cdata-record.test.lua:17
0001  GGET     1   0      ; "tonumber"
0002  MOV      3   0
0003  CALL     1   2   2
0000  . FUNCC               ; tonumber
0004  RET1     1   2
---- TRACE 1 IR
0001    fun SLOAD  #0    R
0002    tab FLOAD  0001  func.env
0003    int FLOAD  0002  tab.hmask
0004 >  int EQ     0003  +63 
0005    p64 FLOAD  0002  tab.node
0006 >  p64 HREFK  0005  "tonumber" @8
0007 >  fun HLOAD  0006
0008 >  cdt SLOAD  #2    T
0009 >  fun EQ     0007  tonumber
---- TRACE 1 stop -> return

ok - recorded with NULL and not converted for NULL
---- TRACE 2 start tap.lua:44
0001  TGETS    4   0   0  ; "total"
0002  ADDVN    4   4   0  ; 1
0003  TSETS    4   0   0  ; "total"
0004  GGET     4   1      ; "io"
0005  TGETS    4   4   2  ; "write"
0006  GGET     6   3      ; "string"
0007  TGETS    6   6   4  ; "rep"
0008  KSTR     8   5      ; " "
0009  TGETS    9   0   6  ; "level"
0010  MULNV    9   9   1  ; 4
0011  CALL     6   0   3
0000  . FUNCC               ; string.rep
0012  CALLM    4   1   0
0000  . FUNCC               ; io.write
0013  ISF          1
0014  JMP      4 => 0025
0015  GGET     4   1      ; "io"
0016  TGETS    4   4   2  ; "write"
0017  GGET     6   3      ; "string"
0018  TGETS    6   6   7  ; "format"
0019  KSTR     8   8      ; "ok - %s\n"
---- TRACE 2 abort tap.lua:48 -- error thrown or hook called during recording

ok - recorded with NULL and converted for 0LL
---- TRACE flush

---- TRACE 1 start lj-408-tonumber-cdata-record.test.lua:17
0001  GGET     1   0      ; "tonumber"
0002  MOV      3   0
0003  CALL     1   2   2
0000  . FUNCC               ; tonumber
0004  RET1     1   2
---- TRACE 1 IR
0001    fun SLOAD  #0    R
0002    tab FLOAD  0001  func.env
0003    int FLOAD  0002  tab.hmask
0004 >  int EQ     0003  +63 
0005    p64 FLOAD  0002  tab.node
0006 >  p64 HREFK  0005  "tonumber" @8
0007 >  fun HLOAD  0006
0008 >  cdt SLOAD  #2    T
0009 >  fun EQ     0007  tonumber
0010    u16 FLOAD  0008  cdata.ctypeid
0011 >  int EQ     0010  +11 
0012    i64 FLOAD  0008  cdata.int64
0013    num CONV   0012  num.i64
---- TRACE 1 stop -> return

ok - recorded with 0LL and converted for 0LL
---- TRACE 2 start tap.lua:44
0001  TGETS    4   0   0  ; "total"
0002  ADDVN    4   4   0  ; 1
0003  TSETS    4   0   0  ; "total"
0004  GGET     4   1      ; "io"
0005  TGETS    4   4   2  ; "write"
0006  GGET     6   3      ; "string"
0007  TGETS    6   6   4  ; "rep"
0008  KSTR     8   5      ; " "
0009  TGETS    9   0   6  ; "level"
0010  MULNV    9   9   1  ; 4
0011  CALL     6   0   3
0000  . FUNCC               ; string.rep
0012  CALLM    4   1   0
0000  . FUNCC               ; io.write
0013  ISF          1
0014  JMP      4 => 0025
0015  GGET     4   1      ; "io"
0016  TGETS    4   4   2  ; "write"
0017  GGET     6   3      ; "string"
0018  TGETS    6   6   7  ; "format"
0019  KSTR     8   8      ; "ok - %s\n"
---- TRACE 2 abort tap.lua:48 -- error thrown or hook called during recording

ok - recorded with 0LL and not converted for NULL
---- TRACE 2 start tarantool.lua:66
0016  UGET     2   1      ; fiber
0017  TGETS    2   2   4  ; "sleep"
0018  MOV      4   1
0019  CALL     2   1   2
0000  . FUNCC               ; C:10b23f5e0
---- TRACE 2 IR
0001    fun SLOAD  #0    R
0002 >  p64 UREFC  0001  #1  
0003 >  tab ULOAD  0002
0004    int FLOAD  0003  tab.hmask
0005 >  int EQ     0004  +31 
0006    p64 FLOAD  0003  tab.node
0007 >  p64 HREFK  0006  "sleep" @4
0008 >  fun HLOAD  0007
0009 >  num SLOAD  #3    T
0010 >  fun EQ     0008  C:10b23f5e0
---- TRACE 2 stop -> stitch

s.ostanevich at s-ostanevich2:~/workspaces/t.sergos/third_party/luajit/test/tarantool-tests % git status
HEAD detached at ae79d993
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	../../patch
	../../src/lj_opt_narrow.c.orig
	../../src/lj_opt_narrow.c.rej
	gh-6976-narrowing-of-unary-minus.test.lua
	lj-408-tonumber-cdata-record.test.lua

nothing added to commit but untracked files present (use "git add" to track)
s.ostanevich at s-ostanevich2:~/workspaces/t.sergos/third_party/luajit/test/tarantool-tests % git diff
s.ostanevich at s-ostanevich2:~/workspaces/t.sergos/third_party/luajit/test/tarantool-tests % 
s.ostanevich at s-ostanevich2:~/workspaces/t.sergos/third_party/luajit/test/tarantool-tests % git -C ../../../.. describe 
2.11.0-entrypoint-494-gdc147ec91



> On 21 Sep 2022, at 15:03, Sergey Kaplun <skaplun at tarantool.org> wrote:
> 
> Hi, Sergos!
> 
> Thanks for the review!
> 
> On 20.09.22, sergos wrote:
>> First of all:
>> 
>> 	s.ostanevich at s-ostanevich2:~/workspaces/t.sergos % uname -a                                                 
>> 	Darwin s-ostanevich2 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:17:10 PDT 2022; root:xnu-8020.140.49~2/RELEASE_X86_64 x86_64
>> 
>> Then I just built Tarantool with ninja:
> 
> I tried run the test suite with ninja, but it's failed:
> | $ ninja -C build tarantool-tests
> | ...
> | /home/burii/builds_workspace/tarantool/master/third_party/luajit/test/tarantool-tests/lj-408.test.lua ...................................... 
> | not ok - recorded with NULL and converted for 0LL
> | Dubious, test returned 1 (wstat 256, 0x100)
> | Failed 1/4 subtests 
> |...
> | ninja: build stopped: subcommand failed.
> 
>> 
>> 	Tarantool 2.11.0-entrypoint-494-gdc147ec91
>> 	Target: Darwin-x86_64-debug
>> 
>> Then I brought the test as a patch from the mail and run ninja test.
> 
> May you check the test output running without ninja like the follwing,
> please:
> 
> | $ ../src/tarantool app-tap/lj-408-tonumber-cdata-record.test.lua 
> | TAP version 13
> | 1..4
> | ok - recorded with NULL and not converted for NULL
> | not ok - recorded with NULL and converted for 0LL
> |   ---
> |   filename: app-tap/lj-408-tonumber-cdata-record.test.lua
> |   line: 0
> |   trace:
> |   - line: 0
> |     source: '@app-tap/lj-408-tonumber-cdata-record.test.lua'
> |     filename: app-tap/lj-408-tonumber-cdata-record.test.lua
> |     what: main
> |     namewhat: 
> |     src: app-tap/lj-408-tonumber-cdata-record.test.lua
> |   ...
> | ok - recorded with 0LL and converted for 0LL
> | ok - recorded with 0LL and not converted for NULL
> | # failed subtest: 1
> 
> Also, please, check `jit.dump()` output. Maybe there is not trace for
> some reason.
> You can run the following command:
> | $ ../src/tarantool -e 'require"jit.dump".start("ib")' app-tap/lj-408-tonumber-cdata-record.test.lua
> 
> The start of output should be the following without the patch.
> 
> | 1..4
> | ---- TRACE 1 start lj-408-tonumber-cdata-record.test.lua:17
> | 0001  GGET     1   0      ; "tonumber"
> | 0002  MOV      2   0
> | 0003  CALL     1   2   2
> | 0000  . FUNCC               ; tonumber
> | 0004  RET1     1   2
> | ---- TRACE 1 IR
> | 0001    fun SLOAD  #0    R
> | 0002    tab FLOAD  0001  func.env
> | 0003    int FLOAD  0002  tab.hmask
> | 0004 >  int EQ     0003  +63 
> | 0005    p32 FLOAD  0002  tab.node
> | 0006 >  p32 HREFK  0005  "tonumber" @8
> | 0007 >  fun HLOAD  0006
> | 0008 >  cdt SLOAD  #1    T
> | 0009 >  fun EQ     0007  tonumber
> | ---- TRACE 1 stop -> return
> | ...
> 
>> 
>> The output says the test passes, while sources contains no patch. Am I missing something?
>> 
>> Sergos
>> 
> 
> <snipped>
> 
>>> 
>> 
> 
> -- 
> Best regards,
> Sergey Kaplun

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20220921/9f489018/attachment.htm>


More information about the Tarantool-patches mailing list