]> gcc.gnu.org Git - gcc.git/commitdiff
c-common.c (c_common_init): -Wtraditional also implies -Wlong-long.
authorZack Weinberg <zack@gcc.gnu.org>
Fri, 2 Aug 2002 04:18:16 +0000 (04:18 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Fri, 2 Aug 2002 04:18:16 +0000 (04:18 +0000)
* c-common.c (c_common_init): -Wtraditional also implies -Wlong-long.
* cppinit.c (cpp_post_options): Likewise.

* cppexp.c (cpp_classify_number): Suppress -Wtraditional
warning about 'LL' suffix (but not 'ULL' etc) when
-Wno-long-long is in effect.

* cppmacro.c (_cpp_builtin_macro_text) [BT_TIME, BT_DATE]:
Check for failing time()/localtime(), issue a warning, and
make __TIME__ and __DATE__ expand to fallback strings.

* doc/cpp.texi, doc/extend.texi: Document behavior of __DATE__
and __TIME__ when the date and time cannot be determined.

From-SVN: r55969

gcc/ChangeLog
gcc/c-common.c
gcc/cppexp.c
gcc/cppinit.c
gcc/cppmacro.c
gcc/doc/cpp.texi
gcc/doc/extend.texi

index f86aa87b6d6a444a5b2e4b7d101141b199a1dc72..d0c32e545c20f48368d5dbde44122e0bc870bc07 100644 (file)
@@ -1,3 +1,19 @@
+2002-08-01  Zack Weinberg  <zack@codesourcery.com>
+
+       * c-common.c (c_common_init): -Wtraditional also implies -Wlong-long.
+       * cppinit.c (cpp_post_options): Likewise.
+
+       * cppexp.c (cpp_classify_number): Suppress -Wtraditional
+       warning about 'LL' suffix (but not 'ULL' etc) when
+       -Wno-long-long is in effect.
+
+       * cppmacro.c (_cpp_builtin_macro_text) [BT_TIME, BT_DATE]:
+       Check for failing time()/localtime(), issue a warning, and
+       make __TIME__ and __DATE__ expand to fallback strings.
+
+       * doc/cpp.texi, doc/extend.texi: Document behavior of __DATE__
+       and __TIME__ when the date and time cannot be determined.
+
 2002-08-02  Alan Modra  <amodra@bigpond.net.au>
 
        * config/rs6000/rs6000.c (output_cbranch): Hint differently for power4.
 2002-08-02  Alan Modra  <amodra@bigpond.net.au>
 
        * config/rs6000/rs6000.c (output_cbranch): Hint differently for power4.
@@ -48,7 +64,7 @@
 
 2002-08-01  Richard Henderson  <rth@redhat.com>
 
 
 2002-08-01  Richard Henderson  <rth@redhat.com>
 
-       * toplev.c (parse_options_and_default_flags): Don't set 
+       * toplev.c (parse_options_and_default_flags): Don't set
        flag_reorder_blocks for -Os.
 
        * config/avr/avr.c (avr_optimization_options): Remove.
        flag_reorder_blocks for -Os.
 
        * config/avr/avr.c (avr_optimization_options): Remove.
index 415127317f017ea5eea81e4aae9bba1fde3866bc..363e72f949d6943fc71dd7799d4b99bec2f13475 100644 (file)
@@ -4945,8 +4945,9 @@ c_common_init (filename)
   options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
 
   /* We want -Wno-long-long to override -pedantic -std=non-c99
   options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
 
   /* We want -Wno-long-long to override -pedantic -std=non-c99
-     whatever the ordering.  */
-  options->warn_long_long = warn_long_long && !flag_isoc99 && pedantic;
+     and/or -Wtraditional, whatever the ordering.  */
+  options->warn_long_long
+    = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
 
   /* Register preprocessor built-ins before calls to
      cpp_main_file.  */
 
   /* Register preprocessor built-ins before calls to
      cpp_main_file.  */
index 569043651d678df64cbaf5908f46add7a23a0ad7..a3ef96538ef03e8bebafea535c97dc3ddd3f75c4 100644 (file)
@@ -270,13 +270,18 @@ cpp_classify_number (pfile, token)
          return CPP_N_INVALID;
        }
 
          return CPP_N_INVALID;
        }
 
-      /* Traditional C only accepted the 'L' suffix.  */
-      if (result != CPP_N_SMALL && result != CPP_N_MEDIUM
-         && CPP_WTRADITIONAL (pfile)
-         && ! cpp_sys_macro_p (pfile))
-       cpp_error (pfile, DL_WARNING,
-                  "traditional C rejects the \"%.*s\" suffix",
-                  (int) (limit - str), str);
+      /* Traditional C only accepted the 'L' suffix.
+         Suppress warning about 'LL' with -Wno-long-long.  */
+      if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
+       {
+         int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
+         int large = (result & CPP_N_WIDTH) == CPP_N_LARGE;
+
+         if (u_or_i || (large && CPP_OPTION (pfile, warn_long_long)))
+           cpp_error (pfile, DL_WARNING,
+                      "traditional C rejects the \"%.*s\" suffix",
+                      (int) (limit - str), str);
+       }
 
       if ((result & CPP_N_WIDTH) == CPP_N_LARGE
          && ! CPP_OPTION (pfile, c99)
 
       if ((result & CPP_N_WIDTH) == CPP_N_LARGE
          && ! CPP_OPTION (pfile, c99)
index 212f1a463084f243f478da8773010e4aa010fc91..03f04c1a5d680279f1b86330667fc26937c7374f 100644 (file)
@@ -1787,8 +1787,9 @@ cpp_post_options (pfile)
 
   /* The compiler front ends override this, but I think this is the
      appropriate setting for the library.  */
 
   /* The compiler front ends override this, but I think this is the
      appropriate setting for the library.  */
-  CPP_OPTION (pfile, warn_long_long) = (CPP_OPTION (pfile, pedantic)
-                                       && !CPP_OPTION (pfile, c99));
+  CPP_OPTION (pfile, warn_long_long)
+     = ((CPP_OPTION (pfile, pedantic) && !CPP_OPTION (pfile, c99))
+       || CPP_OPTION (pfile, warn_traditional));
 
   /* Permanently disable macro expansion if we are rescanning
      preprocessed text.  Read preprocesed source in ISO mode.  */
 
   /* Permanently disable macro expansion if we are rescanning
      preprocessed text.  Read preprocesed source in ISO mode.  */
index 50cc9bbf4ba6fda3cc49a5421ff3356218533bc8..f0986b353cba4303dc7a9edb3a156ecd9e59774d 100644 (file)
@@ -207,17 +207,37 @@ _cpp_builtin_macro_text (pfile, node)
             storage.  We only do this once, and don't generate them
             at init time, because time() and localtime() are very
             slow on some systems.  */
             storage.  We only do this once, and don't generate them
             at init time, because time() and localtime() are very
             slow on some systems.  */
-         time_t tt = time (NULL);
-         struct tm *tb = localtime (&tt);
-
-         pfile->date = _cpp_unaligned_alloc (pfile,
-                                             sizeof ("\"Oct 11 1347\""));
-         sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
-                  monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
-
-         pfile->time = _cpp_unaligned_alloc (pfile, sizeof ("\"12:34:56\""));
-         sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
-                  tb->tm_hour, tb->tm_min, tb->tm_sec);
+         time_t tt;
+         struct tm *tb = NULL;
+
+         /* (time_t) -1 is a legitimate value for "number of seconds
+            since the Epoch", so we have to do a little dance to
+            distinguish that from a genuine error.  */
+         errno = 0;
+         tt = time(NULL);
+         if (tt != (time_t)-1 || errno == 0)
+           tb = localtime (&tt);
+
+         if (tb)
+           {
+             pfile->date = _cpp_unaligned_alloc (pfile,
+                                                 sizeof ("\"Oct 11 1347\""));
+             sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
+                      monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
+
+             pfile->time = _cpp_unaligned_alloc (pfile,
+                                                 sizeof ("\"12:34:56\""));
+             sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
+                      tb->tm_hour, tb->tm_min, tb->tm_sec);
+           }
+         else
+           {
+             cpp_errno (pfile, DL_WARNING,
+                        "could not determine date and time");
+               
+             pfile->date = U"\"??? ?? ????\"";
+             pfile->time = U"\"??:??:??\"";
+           }
        }
 
       if (node->value.builtin == BT_DATE)
        }
 
       if (node->value.builtin == BT_DATE)
index 28e78000cf8db9b6fecfc8debe5fef0abf2f9db6..73785c13794a2b3bb90cb1d0eeb022ed3cd54d72 100644 (file)
@@ -1780,11 +1780,19 @@ the preprocessor is being run.  The string constant contains eleven
 characters and looks like @code{@w{"Feb 12 1996"}}.  If the day of the
 month is less than 10, it is padded with a space on the left.
 
 characters and looks like @code{@w{"Feb 12 1996"}}.  If the day of the
 month is less than 10, it is padded with a space on the left.
 
+If GCC cannot determine the current date, it will emit a warning message
+(once per compilation) and @code{__DATE__} will expand to
+@code{@w{"??? ?? ????"}}.
+
 @item __TIME__
 This macro expands to a string constant that describes the time at
 which the preprocessor is being run.  The string constant contains
 eight characters and looks like @code{"23:59:01"}.
 
 @item __TIME__
 This macro expands to a string constant that describes the time at
 which the preprocessor is being run.  The string constant contains
 eight characters and looks like @code{"23:59:01"}.
 
+If GCC cannot determine the current time, it will emit a warning message
+(once per compilation) and @code{__TIME__} will expand to
+@code{"??:??:??"}.
+
 @item __STDC__
 In normal operation, this macro expands to the constant 1, to signify
 that this compiler conforms to ISO Standard C@.  If GNU CPP is used with
 @item __STDC__
 In normal operation, this macro expands to the constant 1, to signify
 that this compiler conforms to ISO Standard C@.  If GNU CPP is used with
index 0ddcb345161e704d53f5a9c042e3eb996c62eb30..70afc3b8ffab58c188b4aa689b462a49360989b8 100644 (file)
@@ -366,7 +366,9 @@ directive (6.10.6).}
 @cite{The definitions for @code{__DATE__} and @code{__TIME__} when
 respectively, the date and time of translation are not available (6.10.8).}
 
 @cite{The definitions for @code{__DATE__} and @code{__TIME__} when
 respectively, the date and time of translation are not available (6.10.8).}
 
-GCC assumes that the date and time is always available.
+If the date and time are not available, @code{__DATE__} expands to
+@code{@w{"??? ?? ????"}} and @code{__TIME__} expands to
+@code{"??:??:??"}.
 
 @end itemize
 
 
 @end itemize
 
This page took 0.118907 seconds and 5 git commands to generate.