diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-lex.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fltconst-1.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fltconst-2.c | 40 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fltconst-double-pedantic-1.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fltconst-double-pedantic-2.c | 13 |
7 files changed, 88 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c8880f..9e18af5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-04-01 Janis Johnson <janis187@us.ibm.com> + + PR c/29027 + * c-lex.c (interpret_float): Default (no suffix) is double. + 2009-04-1 Xinliang David Li <davidxl@google.com> * config/i386/i386.c (legitimate_constant_p): Recognize diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 72a9590..9fe29df 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -612,6 +612,13 @@ interpret_float (const cpp_token *token, unsigned int flags) char *copy; size_t copylen; + /* Default (no suffix) is double. */ + if (flags & CPP_N_DEFAULT) + { + flags ^= CPP_N_DEFAULT; + flags |= CPP_N_MEDIUM; + } + /* Decode _Fract and _Accum. */ if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM) return interpret_fixed (token, flags); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 74daab6..708697b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -4,6 +4,12 @@ 2009-04-01 Janis Johnson <janis187@us.ibm.com> + PR c/39027 + * gcc.dg/fltconst-1.c: Don't error for use of d or D in suffix. + * gcc.dg/fltconst-2.c: New test. + * gcc.dg/fltconst-double-pedantic-1.c: New test. + * gcc.dg/fltconst-double-pedantic-2.c: New test. + PR c/33466 * gcc.dg/cpp/pr33466.c: New test. * gcc.dg/dfp/pr33466.c: New test. diff --git a/gcc/testsuite/gcc.dg/fltconst-1.c b/gcc/testsuite/gcc.dg/fltconst-1.c index 1b75210..e8ecf67 100644 --- a/gcc/testsuite/gcc.dg/fltconst-1.c +++ b/gcc/testsuite/gcc.dg/fltconst-1.c @@ -3,10 +3,10 @@ double a = 1.ld; /* { dg-error "12:invalid suffix" } */ double b = 1.fd; /* { dg-error "12:invalid suffix" } */ -double c = 1.di; /* { dg-error "12:invalid suffix" } */ -double d = 1.dj; /* { dg-error "12:invalid suffix" } */ -double e = 1.id; /* { dg-error "12:invalid suffix" } */ -double f = 1.jd; /* { dg-error "12:invalid suffix" } */ +double c = 1.di; +double d = 1.dj; +double e = 1.id; +double f = 1.jd; double g = 1.ddd; /* { dg-error "12:invalid suffix" } */ double h = 1.ldd; /* { dg-error "12:invalid suffix" } */ double i = 1.dld; /* { dg-error "12:invalid suffix" } */ diff --git a/gcc/testsuite/gcc.dg/fltconst-2.c b/gcc/testsuite/gcc.dg/fltconst-2.c new file mode 100644 index 0000000..d4d06ac --- /dev/null +++ b/gcc/testsuite/gcc.dg/fltconst-2.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +/* Check that d or D is recognized as a float constant suffix. */ + +double d = 0.5d; +double D = 0.5D; + +/* Check that d or D is recognized in a hexadecimal floating constant. */ + +double hd1 = 0x1.8p1d; +double hd2 = 0x1.p+1D; +double hd3 = 0x0.8p-1d; + +/* Check that imaginary constant suffixes are still recognized with + only i, I, j, or J. */ + +double i = 0.5i; +double I = 0.5I; +double j = 0.5j; +double J = 0.5J; + +/* Check that imaginary constant suffixes are allowed with d or D. */ + +double di = 0.5di; +double dI = 0.5dI; +double Di = 0.5Di; +double DI = 0.5DI; +double dj = 0.5dj; +double dJ = 0.5dJ; +double Dj = 0.5Dj; +double DJ = 0.5DJ; +double id = 0.5id; +double iD = 0.5iD; +double Id = 0.5Id; +double ID = 0.5ID; +double jd = 0.5jd; +double jD = 0.5jD; +double Jd = 0.5Jd; +double JD = 0.5JD; diff --git a/gcc/testsuite/gcc.dg/fltconst-double-pedantic-1.c b/gcc/testsuite/gcc.dg/fltconst-double-pedantic-1.c new file mode 100644 index 0000000..0782729 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fltconst-double-pedantic-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -pedantic" } */ + +double a = 1.d; /* { dg-warning "double constant" } */ +double b = 1.D; /* { dg-warning "double constant" } */ +double c = 1.1e+2d; /* { dg-warning "double constant" } */ + +double d = 1.di; /* { dg-warning "imaginary constants" } */ +double e = 1.dj; /* { dg-warning "imaginary constants" } */ +double f = 1.id; /* { dg-warning "imaginary constants" } */ +double g = 1.jd; /* { dg-warning "imaginary constants" } */ + +double h = 0x1.5p1d; /* { dg-warning "double constant" } */ diff --git a/gcc/testsuite/gcc.dg/fltconst-double-pedantic-2.c b/gcc/testsuite/gcc.dg/fltconst-double-pedantic-2.c new file mode 100644 index 0000000..316571f --- /dev/null +++ b/gcc/testsuite/gcc.dg/fltconst-double-pedantic-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -pedantic-errors" } */ + +double a = 1.d; /* { dg-error "double constant" } */ +double b = 1.D; /* { dg-error "double constant" } */ +double c = 1.1e+2d; /* { dg-error "double constant" } */ + +double d = 1.di; /* { dg-error "imaginary constants" } */ +double e = 1.dj; /* { dg-error "imaginary constants" } */ +double f = 1.id; /* { dg-error "imaginary constants" } */ +double g = 1.jd; /* { dg-error "imaginary constants" } */ + +double h = 0x1.5p1d; /* { dg-error "double constant" } */ |