From 9fda4f4248f24ee3e9feb9204bd1ef035c4859da Mon Sep 17 00:00:00 2001 From: grischka Date: Sat, 18 Jul 2009 22:07:17 +0200 Subject: [PATCH] win32: treat long double as double --- tccgen.c | 6 ++++++ tccpp.c | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/tccgen.c b/tccgen.c index 0ff7ac3f..65db0ac8 100644 --- a/tccgen.c +++ b/tccgen.c @@ -2527,7 +2527,9 @@ static int parse_btype(CType *type, AttributeDef *ad) case TOK_LONG: next(); if ((t & VT_BTYPE) == VT_DOUBLE) { +#ifndef TCC_TARGET_PE t = (t & ~VT_BTYPE) | VT_LDOUBLE; +#endif } else if ((t & VT_BTYPE) == VT_LONG) { t = (t & ~VT_BTYPE) | VT_LLONG; } else { @@ -2544,7 +2546,11 @@ static int parse_btype(CType *type, AttributeDef *ad) case TOK_DOUBLE: next(); if ((t & VT_BTYPE) == VT_LONG) { +#ifdef TCC_TARGET_PE + t = (t & ~VT_BTYPE) | VT_DOUBLE; +#else t = (t & ~VT_BTYPE) | VT_LDOUBLE; +#endif } else { u = VT_DOUBLE; goto basic_type1; diff --git a/tccpp.c b/tccpp.c index 505ba524..25b6cbbf 100644 --- a/tccpp.c +++ b/tccpp.c @@ -1743,9 +1743,14 @@ void parse_number(const char *p) tokc.f = (float)d; } else if (t == 'L') { ch = *p++; +#ifdef TCC_TARGET_PE + tok = TOK_CDOUBLE; + tokc.d = d; +#else tok = TOK_CLDOUBLE; /* XXX: not large enough */ tokc.ld = (long double)d; +#endif } else { tok = TOK_CDOUBLE; tokc.d = d; @@ -1794,8 +1799,13 @@ void parse_number(const char *p) tokc.f = strtof(token_buf, NULL); } else if (t == 'L') { ch = *p++; +#ifdef TCC_TARGET_PE + tok = TOK_CDOUBLE; + tokc.d = strtod(token_buf, NULL); +#else tok = TOK_CLDOUBLE; tokc.ld = strtold(token_buf, NULL); +#endif } else { tok = TOK_CDOUBLE; tokc.d = strtod(token_buf, NULL); -- 2.11.4.GIT