diff options
| -rw-r--r-- | src/lj_cparse.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lj_cparse.c b/src/lj_cparse.c index ddb2e1c9..5a4df556 100644 --- a/src/lj_cparse.c +++ b/src/lj_cparse.c | |||
| @@ -851,18 +851,23 @@ static CTypeID cp_decl_intern(CPState *cp, CPDecl *decl) | |||
| 851 | if (!(info & CTF_BOOL)) { | 851 | if (!(info & CTF_BOOL)) { |
| 852 | CTSize msize = ctype_msizeP(decl->attr); | 852 | CTSize msize = ctype_msizeP(decl->attr); |
| 853 | CTSize vsize = ctype_vsizeP(decl->attr); | 853 | CTSize vsize = ctype_vsizeP(decl->attr); |
| 854 | if (msize && (!(info & CTF_FP) || (msize == 4 || msize == 8))) | 854 | if (msize && (!(info & CTF_FP) || (msize == 4 || msize == 8))) { |
| 855 | CTSize malign = lj_fls(msize); | ||
| 856 | if (malign > 4) malign = 4; /* Limit alignment. */ | ||
| 857 | CTF_INSERT(info, ALIGN, malign); | ||
| 855 | size = msize; /* Override size via mode. */ | 858 | size = msize; /* Override size via mode. */ |
| 859 | } | ||
| 856 | if (vsize) { /* Vector size set? */ | 860 | if (vsize) { /* Vector size set? */ |
| 857 | CTSize esize = lj_fls(size); | 861 | CTSize esize = lj_fls(size); |
| 858 | if (vsize >= esize) { | 862 | if (vsize >= esize) { |
| 859 | /* Intern the element type first. */ | 863 | /* Intern the element type first. */ |
| 860 | id = lj_ctype_intern(cp->cts, info, size); | 864 | id = lj_ctype_intern(cp->cts, info, size); |
| 861 | /* Then create a vector (array) with vsize alignment. */ | 865 | /* Then create a vector (array) with vsize alignment. */ |
| 866 | size = (1u << vsize); | ||
| 867 | if (vsize > 4) vsize = 4; /* Limit alignment. */ | ||
| 862 | if (ctype_align(info) > vsize) vsize = ctype_align(info); | 868 | if (ctype_align(info) > vsize) vsize = ctype_align(info); |
| 863 | info = CTINFO(CT_ARRAY, (info & CTF_QUAL) + CTF_VECTOR + | 869 | info = CTINFO(CT_ARRAY, (info & CTF_QUAL) + CTF_VECTOR + |
| 864 | CTALIGN(vsize)); | 870 | CTALIGN(vsize)); |
| 865 | size = (1u << vsize); | ||
| 866 | } | 871 | } |
| 867 | } | 872 | } |
| 868 | } | 873 | } |
