Skip to content

Commit 439d079

Browse files
committed
Merge pull request #601 from lionello/bug259
Bug259: fixed signed-unsigned comparisons in druntime
2 parents bccd83b + c255a5b commit 439d079

File tree

5 files changed

+24
-30
lines changed

5 files changed

+24
-30
lines changed

src/core/sys/windows/stacktrace.d

+2-2
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ private:
258258
char[2+2*size_t.sizeof+1] buf=void;
259259

260260
immutable len = snprintf(buf.ptr, buf.length, "0x%p", pc);
261-
len < buf.length || assert(0);
261+
cast(uint)len < buf.length || assert(0);
262262
return buf[0 .. len].dup;
263263
}
264264

@@ -290,7 +290,7 @@ private:
290290
res ~= fileName[0 .. strlen(fileName)];
291291
res ~= "(";
292292
immutable len = snprintf(buf.ptr, buf.length, "%u", lineNum);
293-
len < buf.length || assert(0);
293+
cast(uint)len < buf.length || assert(0);
294294
res ~= buf[0 .. len];
295295
res ~= ")";
296296
return res;

src/rt/deh_win64_posix.d

+3-3
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ extern (C) void _d_throwc(Object h)
278278
debug(PRINTF)
279279
{
280280
printf("handler_info[%d]:\n", dim);
281-
for (int i = 0; i < dim; i++)
281+
for (uint i = 0; i < dim; i++)
282282
{
283283
auto phi = &handler_table.handler_info.ptr[i];
284284
printf("\t[%d]: offset = x%04x, endoffset = x%04x, prev_index = %d, cioffset = x%04x, finally_offset = %x\n",
@@ -287,7 +287,7 @@ extern (C) void _d_throwc(Object h)
287287
}
288288

289289
auto index = -1;
290-
for (int i = 0; i < dim; i++)
290+
for (uint i = 0; i < dim; i++)
291291
{
292292
auto phi = &handler_table.handler_info.ptr[i];
293293

@@ -345,7 +345,7 @@ extern (C) void _d_throwc(Object h)
345345

346346
auto pci = cast(DCatchInfo *)(cast(char *)handler_table + phi.cioffset);
347347
auto ncatches = pci.ncatches;
348-
for (int i = 0; i < ncatches; i++)
348+
for (uint i = 0; i < ncatches; i++)
349349
{
350350
auto ci = **cast(ClassInfo **)h;
351351

src/rt/dmain2.d

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ extern (C) int _d_run_main(int argc, char **argv, MainFunc mainFunc)
336336
immutable size_t totalArgsLength = WideCharToMultiByte(65001, 0, wCommandLine, cast(int)wCommandLineLength, null, 0, null, null);
337337
{
338338
char* totalArgsBuff = cast(char*) alloca(totalArgsLength);
339-
int j = 0;
339+
size_t j = 0;
340340
foreach (i; 0 .. wargc)
341341
{
342342
immutable size_t wlen = wcslen(wargs[i]);

src/rt/lifetime.d

+6-6
Original file line numberDiff line numberDiff line change
@@ -463,13 +463,13 @@ BlkInfo *__getBlkInfo(void *interior)
463463
auto curi = ptr + __nextBlkIdx;
464464
for(auto i = curi; i >= ptr; --i)
465465
{
466-
if(i.base && i.base <= interior && (interior - i.base) < i.size)
466+
if(i.base && i.base <= interior && cast(size_t)(interior - i.base) < i.size)
467467
return i;
468468
}
469469

470470
for(auto i = ptr + N_CACHE_BLOCKS - 1; i > curi; --i)
471471
{
472-
if(i.base && i.base <= interior && (interior - i.base) < i.size)
472+
if(i.base && i.base <= interior && cast(size_t)(interior - i.base) < i.size)
473473
return i;
474474
}
475475
}
@@ -2039,7 +2039,7 @@ extern (C) void[] _d_arraycatnT(const TypeInfo ti, uint n, ...)
20392039
{
20402040
byte[]* p = cast(byte[]*)(&n + 1);
20412041

2042-
for (auto i = 0; i < n; i++)
2042+
for (auto i = 0u; i < n; i++)
20432043
{
20442044
byte[] b = *p++;
20452045
length += b.length;
@@ -2060,7 +2060,7 @@ extern (C) void[] _d_arraycatnT(const TypeInfo ti, uint n, ...)
20602060
__va_list argsave = __va_argsave.va;
20612061
va_list ap;
20622062
va_start(ap, __va_argsave);
2063-
for (auto i = 0; i < n; i++)
2063+
for (auto i = 0u; i < n; i++)
20642064
{
20652065
byte[] b;
20662066
va_arg(ap, b);
@@ -2082,7 +2082,7 @@ extern (C) void[] _d_arraycatnT(const TypeInfo ti, uint n, ...)
20822082
p = cast(byte[]*)(&n + 1);
20832083

20842084
size_t j = 0;
2085-
for (auto i = 0; i < n; i++)
2085+
for (auto i = 0u; i < n; i++)
20862086
{
20872087
byte[] b = *p++;
20882088
if (b.length)
@@ -2111,7 +2111,7 @@ extern (C) void[] _d_arraycatnT(const TypeInfo ti, uint n, ...)
21112111
{
21122112
va_list ap2 = &argsave;
21132113
size_t j = 0;
2114-
for (auto i = 0; i < n; i++)
2114+
for (auto i = 0u; i < n; i++)
21152115
{
21162116
byte[] b;
21172117
va_arg(ap2, b);

src/rt/switch_.d

+12-18
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ in
3535
assert(ca.length >= 0);
3636

3737
// Make sure table[] is sorted correctly
38-
int j;
39-
40-
for (j = 1; j < table.length; j++)
38+
for (size_t j = 1u; j < table.length; j++)
4139
{
4240
auto len1 = table[j - 1].length;
4341
auto len2 = table[j].length;
@@ -54,14 +52,13 @@ in
5452
}
5553
out (result)
5654
{
57-
int i;
5855
int cj;
5956

6057
//printf("out _d_switch_string()\n");
6158
if (result == -1)
6259
{
6360
// Not found
64-
for (i = 0; i < table.length; i++)
61+
for (auto i = 0u; i < table.length; i++)
6562
{
6663
if (table[i].length == ca.length)
6764
{ cj = memcmp(table[i].ptr, ca.ptr, ca.length);
@@ -71,8 +68,8 @@ out (result)
7168
}
7269
else
7370
{
74-
assert(0 <= result && result < table.length);
75-
for (i = 0; 1; i++)
71+
assert(0 <= result && cast(size_t)result < table.length);
72+
for (auto i = 0u; 1; i++)
7673
{
7774
assert(i < table.length);
7875
if (table[i].length == ca.length)
@@ -182,9 +179,7 @@ in
182179
assert(ca.length >= 0);
183180

184181
// Make sure table[] is sorted correctly
185-
int j;
186-
187-
for (j = 1; j < table.length; j++)
182+
for (size_t j = 1u; j < table.length; j++)
188183
{
189184
auto len1 = table[j - 1].length;
190185
auto len2 = table[j].length;
@@ -201,14 +196,13 @@ in
201196
}
202197
out (result)
203198
{
204-
int i;
205199
int c;
206200

207201
//printf("out _d_switch_ustring()\n");
208202
if (result == -1)
209203
{
210204
// Not found
211-
for (i = 0; i < table.length; i++)
205+
for (auto i = 0u; i < table.length; i++)
212206
{
213207
if (table[i].length == ca.length)
214208
{ c = memcmp(table[i].ptr, ca.ptr, ca.length * wchar.sizeof);
@@ -218,8 +212,8 @@ out (result)
218212
}
219213
else
220214
{
221-
assert(0 <= result && result < table.length);
222-
for (i = 0; 1; i++)
215+
assert(0 <= result && cast(size_t)result < table.length);
216+
for (auto i = 0u; 1; i++)
223217
{
224218
assert(i < table.length);
225219
if (table[i].length == ca.length)
@@ -315,7 +309,7 @@ in
315309
assert(ca.length >= 0);
316310

317311
// Make sure table[] is sorted correctly
318-
for (auto j = 1; j < table.length; j++)
312+
for (auto j = 1u; j < table.length; j++)
319313
{
320314
auto len1 = table[j - 1].length;
321315
auto len2 = table[j].length;
@@ -334,7 +328,7 @@ out (result)
334328
if (result == -1)
335329
{
336330
// Not found
337-
for (auto i = 0; i < table.length; i++)
331+
for (auto i = 0u; i < table.length; i++)
338332
{
339333
if (table[i].length == ca.length)
340334
{ auto c = memcmp(table[i].ptr, ca.ptr, ca.length * dchar.sizeof);
@@ -344,8 +338,8 @@ out (result)
344338
}
345339
else
346340
{
347-
assert(0 <= result && result < table.length);
348-
for (auto i = 0; 1; i++)
341+
assert(0 <= result && cast(size_t)result < table.length);
342+
for (auto i = 0u; 1; i++)
349343
{
350344
assert(i < table.length);
351345
if (table[i].length == ca.length)

0 commit comments

Comments
 (0)