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)
range.max = INT64_MAX;
else
range.max = 1LU << max_memno;
range.max = 1ULL << max_memno;
i.type = TInteger;
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);
free (s);
fprintf(codefile, "members |= (1LU << %u);\n", memno);
fprintf(codefile, "members |= (1ULL << %u);\n", memno);
memno++;
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)
errx(1, "malloc");
fprintf(codefile, "if((members & (1LU << %u)) == 0)\n", memno);
fprintf(codefile, "if((members & (1ULL << %u)) == 0)\n", memno);
if(m->optional)
fprintf(codefile, "%s = NULL;\n", s);
else if(m->defval)

View File

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