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