diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-03-21 16:28:49 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2006-03-21 16:28:49 -0300 |
| commit | 1ae0b6c0bf9c389bcf9bdf266591cb1e17e80a15 (patch) | |
| tree | 2c9d090fe0c4c7e8e1486e43bc24fd6bddfc0ddb /bugs | |
| parent | e1dda047b24600e67796279337db4be1d01cb673 (diff) | |
| download | lua-1ae0b6c0bf9c389bcf9bdf266591cb1e17e80a15.tar.gz lua-1ae0b6c0bf9c389bcf9bdf266591cb1e17e80a15.tar.bz2 lua-1ae0b6c0bf9c389bcf9bdf266591cb1e17e80a15.zip | |
BUG: should copy the union, not (some of) its fields
Diffstat (limited to 'bugs')
| -rw-r--r-- | bugs | 42 |
1 files changed, 42 insertions, 0 deletions
| @@ -797,3 +797,45 @@ patch = [[ | |||
| 797 | 797 | ||
| 798 | } | 798 | } |
| 799 | 799 | ||
| 800 | |||
| 801 | |||
| 802 | ----------------------------------------------------------------- | ||
| 803 | -- Lua 5.1 | ||
| 804 | |||
| 805 | Bug{ | ||
| 806 | what = [[In 16-bit machines, expressions and/or with numeric constants as the | ||
| 807 | right operand may result in weird values]], | ||
| 808 | |||
| 809 | report = [[Andreas Stenius, 15/03/2006]], | ||
| 810 | |||
| 811 | example = [[ | ||
| 812 | print(false or 0) -- on 16-bit machines | ||
| 813 | ]], | ||
| 814 | |||
| 815 | patch = [[ | ||
| 816 | * lcode.c: | ||
| 817 | @@ -731,17 +731,15 @@ | ||
| 818 | case OPR_AND: { | ||
| 819 | lua_assert(e1->t == NO_JUMP); /* list must be closed */ | ||
| 820 | luaK_dischargevars(fs, e2); | ||
| 821 | - luaK_concat(fs, &e1->f, e2->f); | ||
| 822 | - e1->k = e2->k; e1->u.s.info = e2->u.s.info; | ||
| 823 | - e1->u.s.aux = e2->u.s.aux; e1->t = e2->t; | ||
| 824 | + luaK_concat(fs, &e2->f, e1->f); | ||
| 825 | + *e1 = *e2; | ||
| 826 | break; | ||
| 827 | } | ||
| 828 | case OPR_OR: { | ||
| 829 | lua_assert(e1->f == NO_JUMP); /* list must be closed */ | ||
| 830 | luaK_dischargevars(fs, e2); | ||
| 831 | - luaK_concat(fs, &e1->t, e2->t); | ||
| 832 | - e1->k = e2->k; e1->u.s.info = e2->u.s.info; | ||
| 833 | - e1->u.s.aux = e2->u.s.aux; e1->f = e2->f; | ||
| 834 | + luaK_concat(fs, &e2->t, e1->t); | ||
| 835 | + *e1 = *e2; | ||
| 836 | break; | ||
| 837 | } | ||
| 838 | ]], | ||
| 839 | |||
| 840 | } | ||
| 841 | |||
