Commit 56da7207 by Zack Weinberg

c-common.c (c_common_init): -Wtraditional also implies -Wlong-long.

	* 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
parent 88c38659
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> 2002-08-02 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/rs6000.c (output_cbranch): Hint differently for power4. * config/rs6000/rs6000.c (output_cbranch): Hint differently for power4.
...@@ -48,7 +64,7 @@ ...@@ -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. flag_reorder_blocks for -Os.
* config/avr/avr.c (avr_optimization_options): Remove. * config/avr/avr.c (avr_optimization_options): Remove.
......
...@@ -4945,8 +4945,9 @@ c_common_init (filename) ...@@ -4945,8 +4945,9 @@ c_common_init (filename)
options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS; options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
/* We want -Wno-long-long to override -pedantic -std=non-c99 /* We want -Wno-long-long to override -pedantic -std=non-c99
whatever the ordering. */ and/or -Wtraditional, whatever the ordering. */
options->warn_long_long = warn_long_long && !flag_isoc99 && pedantic; options->warn_long_long
= warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
/* Register preprocessor built-ins before calls to /* Register preprocessor built-ins before calls to
cpp_main_file. */ cpp_main_file. */
......
...@@ -270,13 +270,18 @@ cpp_classify_number (pfile, token) ...@@ -270,13 +270,18 @@ cpp_classify_number (pfile, token)
return CPP_N_INVALID; return CPP_N_INVALID;
} }
/* Traditional C only accepted the 'L' suffix. */ /* Traditional C only accepted the 'L' suffix.
if (result != CPP_N_SMALL && result != CPP_N_MEDIUM Suppress warning about 'LL' with -Wno-long-long. */
&& CPP_WTRADITIONAL (pfile) if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
&& ! cpp_sys_macro_p (pfile)) {
cpp_error (pfile, DL_WARNING, int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
"traditional C rejects the \"%.*s\" suffix", int large = (result & CPP_N_WIDTH) == CPP_N_LARGE;
(int) (limit - str), str);
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 if ((result & CPP_N_WIDTH) == CPP_N_LARGE
&& ! CPP_OPTION (pfile, c99) && ! CPP_OPTION (pfile, c99)
......
...@@ -1787,8 +1787,9 @@ cpp_post_options (pfile) ...@@ -1787,8 +1787,9 @@ cpp_post_options (pfile)
/* The compiler front ends override this, but I think this is the /* The compiler front ends override this, but I think this is the
appropriate setting for the library. */ appropriate setting for the library. */
CPP_OPTION (pfile, warn_long_long) = (CPP_OPTION (pfile, pedantic) CPP_OPTION (pfile, warn_long_long)
&& !CPP_OPTION (pfile, c99)); = ((CPP_OPTION (pfile, pedantic) && !CPP_OPTION (pfile, c99))
|| CPP_OPTION (pfile, warn_traditional));
/* Permanently disable macro expansion if we are rescanning /* Permanently disable macro expansion if we are rescanning
preprocessed text. Read preprocesed source in ISO mode. */ preprocessed text. Read preprocesed source in ISO mode. */
......
...@@ -207,17 +207,37 @@ _cpp_builtin_macro_text (pfile, node) ...@@ -207,17 +207,37 @@ _cpp_builtin_macro_text (pfile, node)
storage. We only do this once, and don't generate them storage. We only do this once, and don't generate them
at init time, because time() and localtime() are very at init time, because time() and localtime() are very
slow on some systems. */ slow on some systems. */
time_t tt = time (NULL); time_t tt;
struct tm *tb = localtime (&tt); struct tm *tb = NULL;
pfile->date = _cpp_unaligned_alloc (pfile, /* (time_t) -1 is a legitimate value for "number of seconds
sizeof ("\"Oct 11 1347\"")); since the Epoch", so we have to do a little dance to
sprintf ((char *) pfile->date, "\"%s %2d %4d\"", distinguish that from a genuine error. */
monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900); errno = 0;
tt = time(NULL);
pfile->time = _cpp_unaligned_alloc (pfile, sizeof ("\"12:34:56\"")); if (tt != (time_t)-1 || errno == 0)
sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"", tb = localtime (&tt);
tb->tm_hour, tb->tm_min, tb->tm_sec);
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)
......
...@@ -1780,11 +1780,19 @@ the preprocessor is being run. The string constant contains eleven ...@@ -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 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. 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__ @item __TIME__
This macro expands to a string constant that describes the time at This macro expands to a string constant that describes the time at
which the preprocessor is being run. The string constant contains which the preprocessor is being run. The string constant contains
eight characters and looks like @code{"23:59:01"}. 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__ @item __STDC__
In normal operation, this macro expands to the constant 1, to signify 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 that this compiler conforms to ISO Standard C@. If GNU CPP is used with
......
...@@ -366,7 +366,9 @@ directive (6.10.6).} ...@@ -366,7 +366,9 @@ directive (6.10.6).}
@cite{The definitions for @code{__DATE__} and @code{__TIME__} when @cite{The definitions for @code{__DATE__} and @code{__TIME__} when
respectively, the date and time of translation are not available (6.10.8).} 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment