]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[C++ PATCH] Remove K&R declaration hack.
authorNathan Sidwell <nathan@acm.org>
Fri, 31 Aug 2018 11:19:33 +0000 (11:19 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 31 Aug 2018 11:19:33 +0000 (11:19 +0000)
https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01885.html
gcc/
* doc/extend.texi (Backwards Compatibility): Remove implicit
extern C leeway of () being (...).
gcc/cp/
* decl.c (decls_match): Remove SYSTEM_IMPLICIT_EXTERN_C matching
of return types and parms.
* parser.c (cp_parser_parameter_declaration_clause): Likewise,
'()' always means '(void)'.

From-SVN: r264013

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/parser.c
gcc/doc/extend.texi

index 05ccec37f99e271c7f76e4fbbfe004a7be510353..1fbcbd5bea5b0cdfdfb52ba283a6f346e9d33910 100644 (file)
@@ -1,3 +1,8 @@
+2018-08-31  Nathan Sidwell  <nathan@acm.org>
+
+       * doc/extend.texi (Backwards Compatibility): Remove implicit
+       extern C leeway of () being (...).
+
 2018-08-31  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * ipa-inline.c (can_inline_edge_by_limits_p): Fix typos in comment.
index 6ecd48dfac81569192af33d974c6208ec7d6df35..0c5a4bf71c59ca7adcd2ca835d01ae2a92e28699 100644 (file)
@@ -1,3 +1,10 @@
+2018-08-31  Nathan Sidwell  <nathan@acm.org>
+
+       * decl.c (decls_match): Remove SYSTEM_IMPLICIT_EXTERN_C matching
+       of return types and parms.
+       * parser.c (cp_parser_parameter_declaration_clause): Likewise,
+       '()' always means '(void)'.
+
 2018-08-29  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/87095
index c6711f74177fe4bcb9d5cfa00cf77683907f41af..d743e6fef25f5707a8f840492383ebc5c6f00c6e 100644 (file)
@@ -968,30 +968,12 @@ decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
       if (same_type_p (TREE_TYPE (f1), r2))
        {
          if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
-             && (fndecl_built_in_p (olddecl)
-#ifdef SYSTEM_IMPLICIT_EXTERN_C
-                 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
-                 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
-#endif
-             ))
+             && fndecl_built_in_p (olddecl))
            {
              types_match = self_promoting_args_p (p1);
              if (p1 == void_list_node)
                TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
            }
-#ifdef SYSTEM_IMPLICIT_EXTERN_C
-         else if (!prototype_p (f1)
-                  && (DECL_EXTERN_C_P (olddecl)
-                      && DECL_IN_SYSTEM_HEADER (olddecl)
-                      && !DECL_CLASS_SCOPE_P (olddecl))
-                  && (DECL_EXTERN_C_P (newdecl)
-                      && DECL_IN_SYSTEM_HEADER (newdecl)
-                      && !DECL_CLASS_SCOPE_P (newdecl)))
-           {
-             types_match = self_promoting_args_p (p2);
-             TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
-           }
-#endif
          else
            types_match =
              compparms (p1, p2)
index 92e6b40efb444f2b618d8bfba022442817420fa5..f5e4fa4ff0730b378080791d733b05e23228691d 100644 (file)
@@ -21378,16 +21378,7 @@ cp_parser_parameter_declaration_clause (cp_parser* parser)
     }
   else if (token->type == CPP_CLOSE_PAREN)
     /* There are no parameters.  */
-    {
-#ifdef SYSTEM_IMPLICIT_EXTERN_C
-      if (in_system_header_at (input_location)
-         && current_class_type == NULL
-         && current_lang_name == lang_name_c)
-       return NULL_TREE;
-      else
-#endif
-       return void_list_node;
-    }
+    return void_list_node;
   /* Check for `(void)', too, which is a special case.  */
   else if (token->keyword == RID_VOID
           && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
index e3312aa8b422aa6691efa0d18804dfc0abf628d2..9c3cfdbf0229d5f3fb2dd93faf40cf3c0b91c1d6 100644 (file)
@@ -23685,9 +23685,9 @@ deprecated.   @xref{Deprecated Features}.
 @item Implicit C language
 Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
 scope to set the language.  On such systems, all system header files are
-implicitly scoped inside a C language scope.  Also, an empty prototype
-@code{()} is treated as an unspecified number of arguments, rather
-than no arguments, as C++ demands.
+implicitly scoped inside a C language scope.  Such headers must
+correctly prototype function argument types, there is no leeway for
+@code{()} to indicate an unspecified set of arguments.
 
 @end table