asn1: code generators that left bit shift .gt. 31 must use 1ULL

The code generators were shifting "1LU" by (<< 32) and (<< 63) which
are undefined operations for a 32-bit integer.  To ensure the integer
is 64-bit use "1ULL".

Change-Id: I062cae5638139a9fe51563f64b1964f87e2f49e3
This commit is contained in:
Jeffrey Altman
2020-05-30 18:07:43 -04:00
committed by Jeffrey Altman
parent ad2a352600
commit 136abf55b7
3 changed files with 5 additions and 5 deletions

View File

@@ -806,7 +806,7 @@ define_type (int level, const char *name, const char *basename, Type *t, int typ
if (max_memno > 63) if (max_memno > 63)
range.max = INT64_MAX; range.max = INT64_MAX;
else else
range.max = 1LU << max_memno; range.max = 1ULL << max_memno;
i.type = TInteger; i.type = TInteger;
i.range = &range; i.range = &range;

View File

@@ -384,7 +384,7 @@ decode_type(const char *name, const Type *t, int optional, struct value *defval,
decode_type (s, m->type, 0, NULL, forwstr, m->gen_name, NULL, depth + 1); decode_type (s, m->type, 0, NULL, forwstr, m->gen_name, NULL, depth + 1);
free (s); free (s);
fprintf(codefile, "members |= (1LU << %u);\n", memno); fprintf(codefile, "members |= (1ULL << %u);\n", memno);
memno++; memno++;
fprintf(codefile, "break;\n"); fprintf(codefile, "break;\n");
} }
@@ -400,7 +400,7 @@ decode_type(const char *name, const Type *t, int optional, struct value *defval,
if (asprintf (&s, "%s->%s", name, m->gen_name) < 0 || s == NULL) if (asprintf (&s, "%s->%s", name, m->gen_name) < 0 || s == NULL)
errx(1, "malloc"); errx(1, "malloc");
fprintf(codefile, "if((members & (1LU << %u)) == 0)\n", memno); fprintf(codefile, "if((members & (1ULL << %u)) == 0)\n", memno);
if(m->optional) if(m->optional)
fprintf(codefile, "%s = NULL;\n", s); fprintf(codefile, "%s = NULL;\n", s);
else if(m->defval) else if(m->defval)

View File

@@ -53,7 +53,7 @@ generate_2int (const Type *t, const char *gen_name)
gen_name, gen_name); gen_name, gen_name);
HEIM_TAILQ_FOREACH(m, t->members, members) { HEIM_TAILQ_FOREACH(m, t->members, members) {
fprintf (codefile, "if(f.%s) r |= (1LU << %d);\n", fprintf (codefile, "if(f.%s) r |= (1ULL << %d);\n",
m->gen_name, m->val); m->gen_name, m->val);
} }
fprintf (codefile, "return r;\n" fprintf (codefile, "return r;\n"
@@ -114,7 +114,7 @@ generate_units (const Type *t, const char *gen_name)
if(t->members) { if(t->members) {
HEIM_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) { HEIM_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) {
fprintf (codefile, fprintf (codefile,
"\t{\"%s\",\t1LU << %d},\n", m->name, m->val); "\t{\"%s\",\t1ULL << %d},\n", m->name, m->val);
} }
} }