On Tue, May 21, 2013 at 08:17:37PM +0100, Ramsay Jones wrote: > > Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxx> > --- %Ld for a long long int is actually broken on all architectures; L only works for long double. Thanks for fixing that. Formatting nit: I think this reads better when written as: "... blah blah " PRIx64 " blah blah ..." , leaving spaces between the macro and the close/open doublequotes. Further comments below. > @@ -336,10 +337,14 @@ const char *show_instruction(struct instruction *insn) > > switch (expr->type) { > case EXPR_VALUE: > - buf += sprintf(buf, "%lld", expr->value); > + buf += sprintf(buf, "%"PRId64, expr->value); > break; > case EXPR_FVALUE: > +#if !defined(__MINGW32__) > buf += sprintf(buf, "%Lf", expr->fvalue); > +#else > + buf += sprintf(buf, "%f", (double)expr->fvalue); > +#endif This seems really sad; does MinGW really have long double but no way to print it? Can we at least emit something here to indicate possible truncation or loss of precision, if no means exists to print a long double? > @@ -463,7 +468,7 @@ const char *show_instruction(struct instruction *insn) > } > > if (buf >= buffer + sizeof(buffer)) > - die("instruction buffer overflowed %td\n", buf - buffer); > + die("instruction buffer overflowed %d\n", (int)(buf - buffer)); No, ptrdiff_t does not portably fit in int; it generally has the same size as size_t (64-bit on 64-bit platforms). Cast to "long long" and use PRId64 if you must. > --- a/pre-process.c > +++ b/pre-process.c > @@ -158,12 +158,17 @@ static int expand_one_symbol(struct token **list) > } else if (token->ident == &__DATE___ident) { > if (!t) > time(&t); > +#if !defined(__MINGW32__) > strftime(buffer, 12, "%b %e %Y", localtime(&t)); > +#else > + strftime(buffer, 12, "%b %d %Y", localtime(&t)); > + if (buffer[4] == '0') buffer[4] = ' '; > +#endif To the best of my knowledge, nothing guarantees the length of %b, so the [4] here seems wrong. > @@ -980,7 +981,11 @@ static int show_fvalue(struct expression *expr) > int new = new_pseudo(); > long double value = expr->fvalue; > > +#if !defined(__MINGW32__) > printf("\tmovf.%d\t\tv%d,$%Lf\n", expr->ctype->bit_size, new, value); > +#else > + printf("\tmovf.%d\t\tv%d,$%f\n", expr->ctype->bit_size, new, (double)value); > +#endif Same comment as above regarding long double. > --- a/tokenize.c > +++ b/tokenize.c > @@ -547,8 +547,8 @@ static int get_one_number(int c, int next, stream_t *stream) > } > > if (p == buffer_end) { > - sparse_error(stream_pos(stream), "number token exceeds %td characters", > - buffer_end - buffer); > + sparse_error(stream_pos(stream), "number token exceeds %d characters", > + (int)(buffer_end - buffer)); Same comment as above regarding ptrdiff_t. - Josh Triplett -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html