comparison dmd/optimize.c @ 305:2b72433d5c8c trunk

[svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support. Fixed problems with label collisions when using labels inside inline asm. LabelStatement is now easily reached given its Identifier, which should be useful elsewhere too. Enabled inline asm for building the lib/compiler/llvmdc runtime code, fixing branches out of asm makes this possible.
author lindquist
date Fri, 27 Jun 2008 22:04:35 +0200
parents 61615fa85940
children aaade6ded589
comparison
equal deleted inserted replaced
304:3ebc136702dd 305:2b72433d5c8c
232 && !ve->var->isImportedSymbol()) 232 && !ve->var->isImportedSymbol())
233 { 233 {
234 TypeSArray *ts = (TypeSArray *)ve->type; 234 TypeSArray *ts = (TypeSArray *)ve->type;
235 integer_t dim = ts->dim->toInteger(); 235 integer_t dim = ts->dim->toInteger();
236 if (index < 0 || index >= dim) 236 if (index < 0 || index >= dim)
237 error("array index %jd is out of bounds [0..%jd]", index, dim); 237 error("array index %lld is out of bounds [0..%lld]", index, dim);
238 e = new SymOffExp(loc, ve->var, index * ts->next->size()); 238 e = new SymOffExp(loc, ve->var, index * ts->next->size());
239 e->type = type; 239 e->type = type;
240 return e; 240 return e;
241 } 241 }
242 } 242 }
378 if (e2->isConst() == 1) 378 if (e2->isConst() == 1)
379 { 379 {
380 integer_t i2 = e2->toInteger(); 380 integer_t i2 = e2->toInteger();
381 d_uns64 sz = e1->type->size() * 8; 381 d_uns64 sz = e1->type->size() * 8;
382 if (i2 < 0 || i2 > sz) 382 if (i2 < 0 || i2 > sz)
383 { error("shift assign by %jd is outside the range 0..%zu", i2, sz); 383 {
384 error("shift assign by %lld is outside the range 0..%"PRIuSIZE, i2, sz);
384 e2 = new IntegerExp(0); 385 e2 = new IntegerExp(0);
385 } 386 }
386 } 387 }
387 } 388 }
388 return this; 389 return this;
473 if (e->e2->isConst() == 1) 474 if (e->e2->isConst() == 1)
474 { 475 {
475 integer_t i2 = e->e2->toInteger(); 476 integer_t i2 = e->e2->toInteger();
476 d_uns64 sz = e->e1->type->size() * 8; 477 d_uns64 sz = e->e1->type->size() * 8;
477 if (i2 < 0 || i2 > sz) 478 if (i2 < 0 || i2 > sz)
478 { error("shift by %jd is outside the range 0..%zu", i2, sz); 479 {
480 error("shift by %lld is outside the range 0..%"PRIuSIZE, i2, sz);
479 e->e2 = new IntegerExp(0); 481 e->e2 = new IntegerExp(0);
480 } 482 }
481 if (e->e1->isConst() == 1) 483 if (e->e1->isConst() == 1)
482 ex = (*shift)(e->type, e->e1, e->e2); 484 ex = (*shift)(e->type, e->e1, e->e2);
483 } 485 }