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:

committed by
Jeffrey Altman

parent
ad2a352600
commit
136abf55b7
@@ -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 = ⦥
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user