]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c.opt (-Wdate-time): New option
authorTobias Burnus <burnus@gcc.gnu.org>
Tue, 5 Nov 2013 20:27:22 +0000 (21:27 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 5 Nov 2013 20:27:22 +0000 (21:27 +0100)
2013-11-05  Tobias Burnus  <burnus@net-b.de>

gcc/c-family/
        * c.opt (-Wdate-time): New option
        * c-opts.c (sanitize_cpp_opts): Pass on to libcpp.

gcc/
        * doc/invoke.texi (-Wdate-time): Document.

gcc/fortran
        * lang.opt (-Wdate-time): New option
        * cpp.c (gfc_cpp_option_data): Add warn_date_time.
        (gfc_cpp_init_options, gfc_cpp_handle_option,
        gfc_cpp_post_options): Handle it and pass on to libcpp.

gcc/testsuite/
        * g++.dg/warn/wdate-time.C: New.
        * gcc.dg/wdate-time.c: New.
        * gfortran.dg/wdate-time.F90: New.

libcpp/
        * include/cpplib.h (CPP_W_DATE_TIME): Added.
        (cpp_options): Add warn_date_time.
        * init.c (cpp_create_reader): Init it.
        * macro.c (_cpp_builtin_macro_text): Warn when
        __DATE__/__TIME__/__TIMESTAMP__ is used.

From-SVN: r204420

16 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/c-family/c.opt
gcc/doc/invoke.texi
gcc/fortran/ChangeLog
gcc/fortran/cpp.c
gcc/fortran/lang.opt
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/wdate-time.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/wdate-time.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/wdate-time.F90 [new file with mode: 0644]
libcpp/ChangeLog
libcpp/include/cpplib.h
libcpp/init.c
libcpp/macro.c

index 3fe61211adf7ffa01db5c5a54b79acda0cc1104e..66de2f9aff855bc7d16accf84a412da504acb028 100644 (file)
@@ -1,3 +1,7 @@
+2013-11-05  Tobias Burnus  <burnus@net-b.de>
+
+       * doc/invoke.texi (-Wdate-time): Document.
+
 2013-11-05  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * double-int.c (lshift_double, rshift_double): Remove
index 2de4c39f404fd400f2e1858109268774bc88eead..68929521087b463f4aeee76defbb7051610e8e3d 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-05  Tobias Burnus  <burnus@net-b.de>
+
+       * c.opt (-Wdate-time): New option
+       * c-opts.c (sanitize_cpp_opts): Pass on to libcpp.
+
 2013-11-05  Joseph Myers  <joseph@codesourcery.com>
 
        * c-cppbuiltin.c (cpp_iec_559_value): Test
index 702fe1a8bdf50e086b03d5f6f2099a2822a166ed..2de5425e65473dbe303fcef8bf6392b1371478ee 100644 (file)
@@ -1198,6 +1198,7 @@ sanitize_cpp_opts (void)
 
   cpp_opts->unsigned_char = !flag_signed_char;
   cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
+  cpp_opts->warn_date_time = cpp_warn_date_time;
 
   /* Wlong-long is disabled by default. It is enabled by:
       [-Wpedantic | -Wtraditional] -std=[gnu|c]++98 ; or
index 22f8939b535d636f19dbc1a49e9091a1b5624f5d..46391fa496c767f81b5ac1f5b14988179698f3ea 100644 (file)
@@ -640,6 +640,10 @@ Wpragmas
 C ObjC C++ ObjC++ Var(warn_pragmas) Init(1) Warning
 Warn about misuses of pragmas
 
+Wdate-time
+Common Var(cpp_warn_date_time) Warning
+Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage
+
 Wproperty-assign-default
 ObjC ObjC++ Var(warn_property_assign_default) Init(1) Warning
 Warn if a property for an Objective-C object has no assign semantics specified
index 35f41d9445b2e94258f6755b5a92bbb1207589a9..863e518b96fd32b172e2e8964fb1a090d1e2fa76 100644 (file)
@@ -240,7 +240,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wno-attributes -Wno-builtin-macro-redefined @gol
 -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual  @gol
 -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported  @gol
--Wconversion -Wcoverage-mismatch  -Wdelete-incomplete -Wno-cpp  @gol
+-Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp  @gol
 -Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization  @gol
 -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare @gol
 -Wno-endif-labels -Werror  -Werror=* @gol
@@ -4526,6 +4526,13 @@ types. @option{-Wconversion-null} is enabled by default.
 Warn when a literal '0' is used as null pointer constant.  This can
 be useful to facilitate the conversion to @code{nullptr} in C++11.
 
+@item -Wdate-time
+@opindex Wdate-time
+@opindex Wno-date-time
+Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__}
+are encountered as they might prevent bit-wise-identical reproducable
+compilations.
+
 @item -Wdelete-incomplete @r{(C++ and Objective-C++ only)}
 @opindex Wdelete-incomplete
 @opindex Wno-delete-incomplete
index 47b9383dac48f5943f74e0faf6220c983757447a..155a65372614d1457a8594d17afb46f6a323b1eb 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-05  Tobias Burnus  <burnus@net-b.de>
+
+       * lang.opt (-Wdate-time): New option
+       * cpp.c (gfc_cpp_option_data): Add warn_date_time.
+       (gfc_cpp_init_options, gfc_cpp_handle_option,
+       gfc_cpp_post_options): Handle it and pass on to libcpp.
+
 2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
        PR fortran/58989
index ea53681af0c16329bc4456fd2e1798295a0fa73f..8417ddca163404953b05d8d8ba0586673756c5d4 100644 (file)
@@ -100,6 +100,7 @@ struct gfc_cpp_option_data
   const char *deps_filename_user;       /* -MF <arg> */
   int deps_missing_are_generated;       /* -MG */
   int deps_phony;                       /* -MP */
+  int warn_date_time;                   /* -Wdate-time */
 
   const char *multilib;                 /* -imultilib <dir>  */
   const char *prefix;                   /* -iprefix <dir>  */
@@ -262,6 +263,7 @@ gfc_cpp_init_options (unsigned int decoded_options_count,
   gfc_cpp_option.no_predefined = 0;
   gfc_cpp_option.standard_include_paths = 1;
   gfc_cpp_option.verbose = 0;
+  gfc_cpp_option.warn_date_time = 0;
   gfc_cpp_option.deps = 0;
   gfc_cpp_option.deps_skip_system = 0;
   gfc_cpp_option.deps_phony = 0;
@@ -359,6 +361,9 @@ gfc_cpp_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED
       gfc_cpp_option.verbose = value;
       break;
 
+    case OPT_Wdate_time:
+      gfc_cpp_option.warn_date_time = value;
+
     case OPT_A:
     case OPT_D:
     case OPT_U:
@@ -469,6 +474,7 @@ gfc_cpp_post_options (void)
   cpp_option->discard_comments_in_macro_exp = gfc_cpp_option.discard_comments_in_macro_exp;
   cpp_option->print_include_names = gfc_cpp_option.print_include_names;
   cpp_option->preprocessed = gfc_option.flag_preprocessed;
+  cpp_option->warn_date_time = gfc_cpp_option.warn_date_time;
 
   if (gfc_cpp_makedep ())
     {
index 49d5f3ae8bf64b91bde25b13872c00dbb63efbf6..5e09cbd1459223c71044256e2e35d30eaca6d735 100644 (file)
@@ -213,6 +213,10 @@ Wc-binding-type
 Fortran Warning
 Warn if the type of a variable might be not interoperable with C
 
+Wdate-time
+Fortran
+; Documented in C
+
 Wcharacter-truncation
 Fortran Warning
 Warn about truncated character expressions
index 21455038c9f69793792f1cdb19270d3716fdf933..9b5a538e6f725bd5457bab58da7702f3bddf3222 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-05  Tobias Burnus  <burnus@net-b.de>
+
+       * g++.dg/warn/wdate-time.C: New.
+       * gcc.dg/wdate-time.c: New.
+       * gfortran.dg/wdate-time.F90: New.
+
 2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
        PR fortran/58989
diff --git a/gcc/testsuite/g++.dg/warn/wdate-time.C b/gcc/testsuite/g++.dg/warn/wdate-time.C
new file mode 100644 (file)
index 0000000..040dd99
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wdate-time" } */
+
+const char time[] = __TIME__;  /* { dg-warning "might prevent reproduce builds" }  */
+const char date[] = __DATE__;  /* { dg-warning "might prevent reproduce builds" }  */
+const char timestamp[] = __TIMESTAMP__;  /* { dg-warning "might prevent reproduce builds" }  */
diff --git a/gcc/testsuite/gcc.dg/wdate-time.c b/gcc/testsuite/gcc.dg/wdate-time.c
new file mode 100644 (file)
index 0000000..040dd99
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wdate-time" } */
+
+const char time[] = __TIME__;  /* { dg-warning "might prevent reproduce builds" }  */
+const char date[] = __DATE__;  /* { dg-warning "might prevent reproduce builds" }  */
+const char timestamp[] = __TIMESTAMP__;  /* { dg-warning "might prevent reproduce builds" }  */
diff --git a/gcc/testsuite/gfortran.dg/wdate-time.F90 b/gcc/testsuite/gfortran.dg/wdate-time.F90
new file mode 100644 (file)
index 0000000..f3a4f46
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-options "-Wdate-time" }
+print *, __TIMESTAMP__  ! { dg-warning "might prevent reproduce builds" }
+print *, __TIME__  ! { dg-warning "might prevent reproduce builds" }
+print *, __DATE__  ! { dg-warning "might prevent reproduce builds" }
+end
index 2e98e34887e7f09be9deac3075ba2d7083f8cb5b..670affd90e763c55811d520e50e01adb3ed48dd1 100644 (file)
@@ -1,6 +1,14 @@
+2013-11-05  Tobias Burnus  <burnus@net-b.de>
+
+       * include/cpplib.h (CPP_W_DATE_TIME): Added.
+       (cpp_options): Add warn_date_time.
+       * init.c (cpp_create_reader): Init it.
+       * macro.c (_cpp_builtin_macro_text): Warn when
+       __DATE__/__TIME__/__TIMESTAMP__ is used.
+
 2013-10-31  Edward Smith-Rowland  <3dw4rd@verizon.net>
 
-        Implement C++14 digit separators.
+       Implement C++14 digit separators.
        * include/cpplib.h (cpp_options): Add digit_separators flag.
        * internal.h (DIGIT_SEP(c)): New macro.
        * expr.c (cpp_classify_number): Check improper placement of digit sep;
index 34ad6c30c8ee9aec17944761fd71631beab85f35..02927d4c6cbe826664de373a4715148609720dc2 100644 (file)
@@ -337,6 +337,9 @@ struct cpp_options
   /* Nonzero means warn if slash-star appears in a comment.  */
   unsigned char warn_comments;
 
+  /* Nonzero means to warn about __DATA__, __TIME__ and __TIMESTAMP__ usage.   */
+  unsigned char warn_date_time;
+
   /* Nonzero means warn if a user-supplied include directory does not
      exist.  */
   unsigned char warn_missing_include_dirs;
@@ -925,7 +928,8 @@ enum {
   CPP_W_NORMALIZE,
   CPP_W_INVALID_PCH,
   CPP_W_WARNING_DIRECTIVE,
-  CPP_W_LITERAL_SUFFIX
+  CPP_W_LITERAL_SUFFIX,
+  CPP_W_DATE_TIME
 };
 
 /* Output a diagnostic of some kind.  */
index 97aa6cdd45fa408f64c9594694d9825bde6e4198..67444301590b503a19c3965be7e4131b990b49cc 100644 (file)
@@ -193,6 +193,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
   CPP_OPTION (pfile, canonical_system_headers)
       = ENABLE_CANONICAL_SYSTEM_HEADERS;
   CPP_OPTION (pfile, ext_numeric_literals) = 1;
+  CPP_OPTION (pfile, warn_date_time) = 0;
 
   /* Default CPP arithmetic to something sensible for the host for the
      benefit of dumb users like fix-header.  */
index 6d46027e4ea4a0e36ff0b98d18ee071917ddf7cf..3a1728d66636f4e9c4958fd5220bac41df650aec 100644 (file)
@@ -232,6 +232,10 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
 
     case BT_TIMESTAMP:
       {
+       if (CPP_OPTION (pfile, warn_date_time))
+         cpp_warning (pfile, CPP_W_DATE_TIME, "Macro \"%s\" might prevent "
+                      "reproduce builds", NODE_NAME (node));
+
        cpp_buffer *pbuffer = cpp_get_buffer (pfile);
        if (pbuffer->timestamp == NULL)
          {
@@ -325,6 +329,9 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
 
     case BT_DATE:
     case BT_TIME:
+      if (CPP_OPTION (pfile, warn_date_time))
+       cpp_warning (pfile, CPP_W_DATE_TIME, "Macro \"%s\" might prevent "
+                    "reproduce builds", NODE_NAME (node));
       if (pfile->date == NULL)
        {
          /* Allocate __DATE__ and __TIME__ strings from permanent