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
This commit is contained in:
parent
88c3865996
commit
56da7207c1
7 changed files with 75 additions and 22 deletions
|
@ -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.
|
||||
|
@ -48,7 +64,7 @@
|
|||
|
||||
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.
|
||||
|
|
|
@ -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
|
||||
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. */
|
||||
|
|
19
gcc/cppexp.c
19
gcc/cppexp.c
|
@ -270,13 +270,18 @@ cpp_classify_number (pfile, token)
|
|||
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)
|
||||
|
|
|
@ -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. */
|
||||
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. */
|
||||
|
|
|
@ -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. */
|
||||
time_t tt = time (NULL);
|
||||
struct tm *tb = localtime (&tt);
|
||||
time_t tt;
|
||||
struct tm *tb = NULL;
|
||||
|
||||
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);
|
||||
/* (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);
|
||||
|
||||
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);
|
||||
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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
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"}.
|
||||
|
||||
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
|
||||
|
|
|
@ -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).}
|
||||
|
||||
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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue