From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id AF6491A3DD7A; Wed, 4 Mar 2026 13:33:59 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org AF6491A3DD7A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1772620439; bh=PT8KWELA7dLNnf8/rU+pHRO+9vPOrVAI8g39nJaTbCs=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=E1G6ooYMXopwCBU+PqiwVOi/ZJH73qCM4qJQYf2dW/NDu3HPJTl9F6K8fGLn+pOvH JroVqdnVW3kLpJEb+kQqwtshddfKMWyjPWfKieBM+H/SjFrQao41BqsP8ing+JXxAn SZDX4qLM/n7HXIcWF7E2su5GVDgcgCJMgi7Vkgfc= Received: from send243.i.mail.ru (send243.i.mail.ru [95.163.59.82]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 06B621A3DD78 for ; Wed, 4 Mar 2026 13:33:58 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 06B621A3DD78 Received: by exim-smtp-558f87dcd7-rmbrc with esmtpa (envelope-from ) id 1vxjYD-00000000L8R-04Ss; Wed, 04 Mar 2026 13:33:57 +0300 Date: Wed, 4 Mar 2026 13:34:46 +0300 To: Sergey Bronnikov Cc: tarantool-patches@dev.tarantool.org Message-ID: References: <6efe3fc943083c79b3f82b6246f0bd3cfa276d14.1772437706.git.skaplun@tarantool.org> <4ec5bb78-26ca-4d2b-9d6f-d06c13a513c2@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4ec5bb78-26ca-4d2b-9d6f-d06c13a513c2@tarantool.org> X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9FE49BA1A5307ACBF1C1BD57BFC988F7EF7F8D7D731B23D2900894C459B0CD1B91F1B1C701451FBD1460A1D3C0470A96D61FE92E7EEC51ED2FBF1178C00D8FBE1CEE4813122F9A0DF X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7D77100FFB2844417EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566CF7C7957E4725328D34BEC03DCC0DA1666DA7865B819EBDDA60C0057DE47E828389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0ECC8AC47CD0EDEFF8941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B601F8F2FECC0250C8CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB8D32BA5DBAC0009BE9E8FC8737B5C2249EDF998CB16CCEE6976E601842F6C81A12EF20D2F80756B5FB606B96278B59C4276E601842F6C81A127C277FBC8AE2E8B7FE970921847EE7F3AA81AA40904B5D99C9F4D5AE37F343AD1F44FA8B9022EA23BBE47FD9DD3FB595F5C1EE8F4F765FC72CEEB2601E22B093A03B725D353964B0B7D0EA88DDEDAC722CA9DD8327EE4930A3850AC1BE2E7352629B07FD02F83A6C4224003CC83647689D4C264860C145E X-C1DE0DAB: 0D63561A33F958A5809DA74B52AF19AA5002B1117B3ED6964D0BA554731F803BB91D2EB2DEE3878C823CB91A9FED034534781492E4B8EEAD5E90D3DD2A5B7EAFBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D65919B62822A67847CD5E1F3E80ED02FDC4039574B23D9D5C02299FCD811434332B029969C8504D7D16B8341EE9D5BE9A0AD05A76CE1F1DAAFF72BD8AFBC24BDD117824370523BB6C778CD93680B12512CF4C41F94D744909CECFA6C6B0C050A61A8CAF69B82BA93681CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVbwN8XFWZxQULscLH+ghObM= X-Mailru-Sender: 520A125C2F17F0B17094CDC02B85F11B4AA938769710A2D43DE06ABAFEAF6705680585C9CC1EFB1DB7CBEF92542CD7C88B0A2698F12F5C9EC77752E0C033A69E86920BD37369036789A8C6A0E60D2BB63A5DB60FBEB33A8A0DA7A0AF5A3A8387 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit 2/3] DUALNUM: Fix narrowing of unary minus. X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hi, Sergey! Thanks for the review! See my answers below. On 04.03.26, Sergey Bronnikov wrote: > Hi, Sergey, > > thanks for the patch! See my comments. > > Sergey > > On 3/2/26 10:52, Sergey Kaplun wrote: > > From: Mike Pall > > > > Reported by Sergey Kaplun. > > > > (cherry picked from commit b1cd2f83b5d085bb71368b87c91a461be77d4364) > > > > `lj_opt_narrow_unm()` in the DUALNUM mode narrows doubles too > > optimistic, missing 0 check. In that case, the narrowing of 0 is > > incorrect. This leads to the assertion failure in `rec_check_slots()` > > for the string obtained from the corresponding number. > > > > This patch fixes it by restricting the check of the given TValue. > > > > Sergey Kaplun: > > * added the description and the test for the problem > > > > Part of tarantool/tarantool#12134 > > --- > > src/lj_opt_narrow.c | 4 +- > > ...lj-1418-dualnum-narrowing-minus-0.test.lua | 49 +++++++++++++++++++ > > 2 files changed, 51 insertions(+), 2 deletions(-) > > create mode 100644 test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua > > > > diff --git a/src/lj_opt_narrow.c b/src/lj_opt_narrow.c > > index 6b6f20d3..6e3e9533 100644 > > --- a/src/lj_opt_narrow.c > > +++ b/src/lj_opt_narrow.c > > @@ -553,9 +553,9 @@ TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc) > > rc = conv_str_tonum(J, rc, vc); > > if (tref_isinteger(rc)) { > > uint32_t k = (uint32_t)numberVint(vc); > > - if ((LJ_DUALNUM || k != 0) && k != 0x80000000u) { > > + if ((tvisint(vc) || k != 0) && k != 0x80000000u) { > > TRef zero = lj_ir_kint(J, 0); > > - if (!LJ_DUALNUM) > > + if (!tvisint(vc)) > > emitir(IRTGI(IR_NE), rc, zero); > > return emitir(IRTGI(IR_SUBOV), zero, rc); > > } > > diff --git a/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua b/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua > > new file mode 100644 > > index 00000000..84f17953 > > --- /dev/null > > +++ b/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua > > @@ -0,0 +1,49 @@ > > +local tap = require('tap') > > + > > +-- This test demonstrates LuaJIT's incorrect narrowing > > +-- optimization in the DUALNUM mode for 0. > > +-- See alsohttps://github.com/LuaJIT/LuaJIT/issues/1418. > > + > > +local test = tap.test('lj-1418-dualnum-narrowing-minus-0'):skipcond({ > > + ['Test requires JIT enabled'] = not jit.status(), > > +}) > > + > > cannot reproduce an original bug with reverted fix. > > CMake configuration: CFLAGS=-DDUALNUM cmake -S . -B build > -DCMAKE_BUILD_TYPE=Debug LuaJIT should be configured like: | cmake -DLUAJIT_NUMMODE=2 # ... > > +-- Reset hotcounts. > > +jit.opt.start('hotloop=1') > > + > > +-- Hot trace. > > +test_non_const_on_trace(2, 3) > > +-- Record trace, use non zero result value to record. > s/non zero/non-zero/ Fixed, branch is force-pushed: =================================================================== diff --git a/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua b/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua index 84f17953..8f4185ef 100644 --- a/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua +++ b/test/tarantool-tests/lj-1418-dualnum-narrowing-minus-0.test.lua @@ -41,7 +41,7 @@ jit.opt.start('hotloop=1') -- Hot trace. test_non_const_on_trace(2, 3) --- Record trace, use non zero result value to record. +-- Record trace, use non-zero result value to record. test_non_const_on_trace(2, 3) -- Misbehaviour on trace with result zero value. test:is(test_non_const_on_trace(2, 1), '-0', 'correct non-const value on trace') =================================================================== > > +test_non_const_on_trace(2, 3) > > +-- Misbehaviour on trace with result zero value. > > +test:is(test_non_const_on_trace(2, 1), '-0', 'correct non-const value on trace') > > + > > +test:done(true) -- Best regards, Sergey Kaplun