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 011741BB47CF; Thu, 12 Mar 2026 18:56:05 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 011741BB47CF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1773330966; bh=XhuCPaM+f6qQzzpDzitxSNfaErJMSvmRPTsETV1JW3g=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=MZrd6BPyyHsOjdLsaKthG5eUEE1mizlIOnIe3TFSupWDEEfp2HwC1jXF6yDHQaQUu RWYmLQapodVxGY78gejhkA5Y+X35JKO8gx/icY4ZpBlxsidTvhczfs/pi+/sXtAuDa 3X/KUqRT9HyFs9p9rsPx2dj7T+mNipgmMxMuwVpA= Received: from send127.i.mail.ru (send127.i.mail.ru [89.221.237.222]) (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 4EBCF1BB47D2 for ; Thu, 12 Mar 2026 18:55:06 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4EBCF1BB47D2 Received: by exim-smtp-64cdfc6c8d-cbnzz with esmtpa (envelope-from ) id 1w0iNN-00000000Eh8-0Nx2; Thu, 12 Mar 2026 18:55:05 +0300 To: Sergey Bronnikov Date: Thu, 12 Mar 2026 18:55:57 +0300 Message-ID: <77b1bb17f0f22c5f7f5e200359e31339132a5af5.1773330679.git.skaplun@tarantool.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: B8F34718100C35BD X-77F55803: 4F1203BC0FB41BD91ABAE9865AC7DC8818B4CD52367FE9812D05E5E866DFFDF4182A05F538085040227822D78B497CB53DE06ABAFEAF6705B9267EBDBBA94BC04BFFDBE4B98C594AAEBB3C0239580454 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7F2393C4755A27B53EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB5533756627194F95AE6E7C2D6A615E4D797C25B8EAF84827A52559EA46CD7C5DB8FA95BC389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0B687D752F9FE62218941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B6A50BD5087FBFCDAACC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB8D32BA5DBAC0009BE9E8FC8737B5C2249E4C83BE986F2B39D76E601842F6C81A12EF20D2F80756B5FB606B96278B59C4276E601842F6C81A127C277FBC8AE2E8BB4A02512E8976AF43AA81AA40904B5D99C9F4D5AE37F343AD1F44FA8B9022EA23BBE47FD9DD3FB595F5C1EE8F4F765FC72CEEB2601E22B093A03B725D353964B0B7D0EA88DDEDAC722CA9DD8327EE4930A3850AC1BE2E735D2D576BCF940C736C4224003CC83647689D4C264860C145E X-C1DE0DAB: 0D63561A33F958A5F8F80D0FE1D5DA195002B1117B3ED69664829D20427BBCD0E99897350C7C491E823CB91A9FED034534781492E4B8EEAD2739D626790C8313C79554A2A72441328621D336A7BC284946AD531847A6065AED8438A78DFE0A9EBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D6591E92FACD24C6057D909385661E4C3EE4D09E822AB6EF49EC9F3299E9A990F925F8A3935AE1AA177DB8341EE9D5BE9A0A0D39FF35C61829366CD7BC1D24C42D4524AAE7EFF85E1CE46536EB022892E5344C41F94D744909CECFA6C6B0C050A61A8CAF69B82BA93681CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVdbVVJCphTR/zw50yeIuc2w= X-Mailru-Sender: 583F1D7ACE8F49BDD951BA70C165859E46DE9E99F290A01B965EDF11CFD47EC787E5186B0C8379B864F24DE1960110F3F2400F607609286E924004A7DEC283833C7120B22964430C52B393F8C72A41A84198E0F3ECE9B5443453F38A29522196 X-Mras: Ok Subject: [Tarantool-patches] [PATCH luajit 2/2] DUALNUM: Fix recording of loops broken by previous change. 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 Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" From: Mike Pall Thanks to Nicholas Davies. (cherry picked from commit 1c3b5a4d722598ecbb9219480142eda682e87bb1) The previous commit forbids recording for the NaN control variables stack slots. These checks are false positives for integers in DUALNUM mode. This prevents any for loop with integers as slots from being recorded. This patch fixes the checks. Sergey Kaplun: * added the description and the test for the problem Part of tarantool/tarantool#12134 --- src/lj_record.c | 6 ++--- .../lj-1438-jit-for-canary.test.lua | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 test/tarantool-tests/lj-1438-jit-for-canary.test.lua diff --git a/src/lj_record.c b/src/lj_record.c index a3a68b57..dbfc7f47 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -510,9 +510,9 @@ static LoopEvent rec_for(jit_State *J, const BCIns *fori, int isforl) TRef stop; IRType t; /* Avoid semantic mismatches and always failing guards. */ - if (tvisnan(&tv[FORL_IDX]) || - tvisnan(&tv[FORL_STOP]) || - tvisnan(&tv[FORL_STEP]) || + if ((tvisnum(&tv[FORL_IDX]) && tvisnan(&tv[FORL_IDX])) || + (tvisnum(&tv[FORL_STOP]) && tvisnan(&tv[FORL_STOP])) || + (tvisnum(&tv[FORL_STEP]) && tvisnan(&tv[FORL_STEP])) || tvismzero(&tv[FORL_STEP])) lj_trace_err(J, LJ_TRERR_GFAIL); if (isforl) { /* Handle FORL/JFORL opcodes. */ diff --git a/test/tarantool-tests/lj-1438-jit-for-canary.test.lua b/test/tarantool-tests/lj-1438-jit-for-canary.test.lua new file mode 100644 index 00000000..4b67df4c --- /dev/null +++ b/test/tarantool-tests/lj-1438-jit-for-canary.test.lua @@ -0,0 +1,22 @@ +local tap = require('tap') + +-- The test file to check the correct recording of the for loop. +-- Used as a canary test, since we have none. +-- See also https://github.com/LuaJIT/LuaJIT/issues/1438. + +local test = tap.test('lj-1438-jit-for-canary'):skipcond({ + ['Test requires JIT enabled'] = not jit.status(), +}) + +test:plan(1) + +local traceinfo = require('jit.util').traceinfo + +jit.flush() +jit.opt.start('hotloop=1') + +for _ = 1, 4 do end + +test:ok(traceinfo(1), 'simple for loop is recorded') + +test:done(true) -- 2.53.0