aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2016-07-17 16:01:10 +0200
committerMike Pall <mike>2016-07-17 16:01:10 +0200
commitb74ddaf174ce087cf9d6087766afcb7180656661 (patch)
treee7591a8a3bd9994e8550dccab0c9b2ddd5a3493d /src
parent1914de71c7dc10c502ecf033c63665eb6d3e6433 (diff)
downloadluajit-b74ddaf174ce087cf9d6087766afcb7180656661.tar.gz
luajit-b74ddaf174ce087cf9d6087766afcb7180656661.tar.bz2
luajit-b74ddaf174ce087cf9d6087766afcb7180656661.zip
Fix for cdata vs. non-cdata arithmetics/comparisons.
Thanks to Vyacheslav Egorov.
Diffstat (limited to 'src')
-rw-r--r--src/lj_crecord.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index a53a2ce9..0565e5fd 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -1205,7 +1205,7 @@ void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd)
1205 1205
1206static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm) 1206static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm)
1207{ 1207{
1208 if (ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) { 1208 if (sp[0] && sp[1] && ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) {
1209 IRType dt; 1209 IRType dt;
1210 CTypeID id; 1210 CTypeID id;
1211 TRef tr; 1211 TRef tr;
@@ -1263,6 +1263,7 @@ static TRef crec_arith_ptr(jit_State *J, TRef *sp, CType **s, MMS mm)
1263{ 1263{
1264 CTState *cts = ctype_ctsG(J2G(J)); 1264 CTState *cts = ctype_ctsG(J2G(J));
1265 CType *ctp = s[0]; 1265 CType *ctp = s[0];
1266 if (!(sp[0] && sp[1])) return 0;
1266 if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) { 1267 if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) {
1267 if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) && 1268 if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) &&
1268 (ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) { 1269 (ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) {