Mercurial > projects > ldc
comparison dmd/expression.c @ 1372:229e02867307
Fix format-string bugs by adding __attribute__((__format__)) in all applicable
places and fixing all warnings my gcc produced.
Among other things, this should fix several segfaults (including one I just
ran into).
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sun, 17 May 2009 00:15:25 +0200 |
parents | 8026319762be |
children | df11cdec45a2 |
comparison
equal
deleted
inserted
replaced
1371:967d28b7febe | 1372:229e02867307 |
---|---|
1464 | 1464 |
1465 case Twchar: // BUG: need to cast(wchar) | 1465 case Twchar: // BUG: need to cast(wchar) |
1466 case Tdchar: // BUG: need to cast(dchar) | 1466 case Tdchar: // BUG: need to cast(dchar) |
1467 if ((uinteger_t)v > 0xFF) | 1467 if ((uinteger_t)v > 0xFF) |
1468 { | 1468 { |
1469 buf->printf("'\\U%08x'", v); | 1469 buf->printf("'\\U%08x'", (unsigned)v); |
1470 break; | 1470 break; |
1471 } | 1471 } |
1472 case Tchar: | 1472 case Tchar: |
1473 if (v == '\'') | 1473 if (v == '\'') |
1474 buf->writestring("'\\''"); | 1474 buf->writestring("'\\''"); |
2932 } | 2932 } |
2933 | 2933 |
2934 void ArrayLiteralExp::toMangleBuffer(OutBuffer *buf) | 2934 void ArrayLiteralExp::toMangleBuffer(OutBuffer *buf) |
2935 { | 2935 { |
2936 size_t dim = elements ? elements->dim : 0; | 2936 size_t dim = elements ? elements->dim : 0; |
2937 buf->printf("A%u", dim); | 2937 buf->printf("A%zu", dim); |
2938 for (size_t i = 0; i < dim; i++) | 2938 for (size_t i = 0; i < dim; i++) |
2939 { Expression *e = (Expression *)elements->data[i]; | 2939 { Expression *e = (Expression *)elements->data[i]; |
2940 e->toMangleBuffer(buf); | 2940 e->toMangleBuffer(buf); |
2941 } | 2941 } |
2942 } | 2942 } |
3066 } | 3066 } |
3067 | 3067 |
3068 void AssocArrayLiteralExp::toMangleBuffer(OutBuffer *buf) | 3068 void AssocArrayLiteralExp::toMangleBuffer(OutBuffer *buf) |
3069 { | 3069 { |
3070 size_t dim = keys->dim; | 3070 size_t dim = keys->dim; |
3071 buf->printf("A%u", dim); | 3071 buf->printf("A%zu", dim); |
3072 for (size_t i = 0; i < dim; i++) | 3072 for (size_t i = 0; i < dim; i++) |
3073 { Expression *key = (Expression *)keys->data[i]; | 3073 { Expression *key = (Expression *)keys->data[i]; |
3074 Expression *value = (Expression *)values->data[i]; | 3074 Expression *value = (Expression *)values->data[i]; |
3075 | 3075 |
3076 key->toMangleBuffer(buf); | 3076 key->toMangleBuffer(buf); |
3282 } | 3282 } |
3283 | 3283 |
3284 void StructLiteralExp::toMangleBuffer(OutBuffer *buf) | 3284 void StructLiteralExp::toMangleBuffer(OutBuffer *buf) |
3285 { | 3285 { |
3286 size_t dim = elements ? elements->dim : 0; | 3286 size_t dim = elements ? elements->dim : 0; |
3287 buf->printf("S%u", dim); | 3287 buf->printf("S%zu", dim); |
3288 for (size_t i = 0; i < dim; i++) | 3288 for (size_t i = 0; i < dim; i++) |
3289 { Expression *e = (Expression *)elements->data[i]; | 3289 { Expression *e = (Expression *)elements->data[i]; |
3290 if (e) | 3290 if (e) |
3291 e->toMangleBuffer(buf); | 3291 e->toMangleBuffer(buf); |
3292 else | 3292 else |