Only declare gets for C++ < 2014 on Solaris (PR libstdc++/78979)
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Fri, 13 Jan 2017 12:09:13 +0000 (12:09 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Fri, 13 Jan 2017 12:09:13 +0000 (12:09 +0000)
PR libstdc++/78979
* inclhack.def (solaris_gets_c11, solaris_gets_cxx14)
(solaris_std_gets_cxx14, solaris_stdlib_noreturn): New fixes.
* fixincl.x: Regenerate.
* tests/base/iso/stdio_iso.h [SOLARIS_GETS_C11_CHECK,
SOLARIS_GETS_CXX14_CHECK, SOLARIS_STD_GETS_CXX14_CHECK,
SOLARIS_STDLIB_NORETURN_CHECK]: New tests.

From-SVN: r244428

fixincludes/ChangeLog
fixincludes/fixincl.x
fixincludes/inclhack.def
fixincludes/tests/base/iso/stdio_iso.h
fixincludes/tests/base/iso/stdlib_c99.h [new file with mode: 0644]
fixincludes/tests/base/stdio.h

index d447171a8dac9836808c112706758f6e036f7f17..2e6dd11ba9b9c119a60aa6b909c733da1a68aabd 100644 (file)
@@ -1,3 +1,13 @@
+2017-01-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       PR libstdc++/78979
+       * inclhack.def (solaris_gets_c11, solaris_gets_cxx14)
+       (solaris_std_gets_cxx14, solaris_stdlib_noreturn): New fixes.
+       * fixincl.x: Regenerate.
+       * tests/base/iso/stdio_iso.h [SOLARIS_GETS_C11_CHECK,
+       SOLARIS_GETS_CXX14_CHECK, SOLARIS_STD_GETS_CXX14_CHECK,
+       SOLARIS_STDLIB_NORETURN_CHECK]: New tests.
+
 2016-11-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * inclhack.def (solaris_math_12): New fix.
index b0eeef9dfdf1387e5dd0ba39754d30e758b99621..6a010d6b70654db310e1c2a7dfb882218405bb1c 100644 (file)
@@ -2,11 +2,11 @@
  * 
  * DO NOT EDIT THIS FILE   (fixincl.x)
  * 
- * It has been AutoGen-ed  November 20, 2016 at 12:02:46 PM by AutoGen 5.16.2
+ * It has been AutoGen-ed  January 12, 2017 at 11:46:34 AM by AutoGen 5.16.2
  * From the definitions    inclhack.def
  * and the template file   fixincl
  */
-/* DO NOT SVN-MERGE THIS FILE, EITHER Sun Nov 20 12:02:47 MET 2016
+/* DO NOT SVN-MERGE THIS FILE, EITHER Thu Jan 12 11:46:34  2017
  *
  * You must regenerate it.  Use the ./genfixes script.
  *
@@ -15,7 +15,7 @@
  * certain ANSI-incompatible system header files which are fixed to work
  * correctly with ANSI C and placed in a directory that GNU C will search.
  *
- * This file contains 242 fixup descriptions.
+ * This file contains 246 fixup descriptions.
  *
  * See README for more information.
  *
@@ -7066,6 +7066,84 @@ static const char* apzSolaris_Getc_Strict_StdcPatch[] = {
     "%1(!defined(_STRICT_STDC) || (__cplusplus >= 199711L))%2",
     (char*)NULL };
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Solaris_Gets_C11 fix
+ */
+tSCC zSolaris_Gets_C11Name[] =
+     "solaris_gets_c11";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zSolaris_Gets_C11List[] =
+  "iso/stdio_iso.h\0";
+/*
+ *  Machine/OS name selection pattern
+ */
+tSCC* apzSolaris_Gets_C11Machs[] = {
+        "*-*-solaris2*",
+        (const char*)NULL };
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zSolaris_Gets_C11Select0[] =
+       "(extern char[ \t]*\\*gets\\(char \\*\\));";
+
+#define    SOLARIS_GETS_C11_TEST_CT  1
+static tTestDesc aSolaris_Gets_C11Tests[] = {
+  { TT_EGREP,    zSolaris_Gets_C11Select0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Solaris_Gets_C11
+ */
+static const char* apzSolaris_Gets_C11Patch[] = {
+    "format",
+    "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n\
+%1 __attribute__((__deprecated__));\n\
+#endif",
+    (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Solaris_Gets_Cxx14 fix
+ */
+tSCC zSolaris_Gets_Cxx14Name[] =
+     "solaris_gets_cxx14";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zSolaris_Gets_Cxx14List[] =
+  "iso/stdio_iso.h\0";
+/*
+ *  Machine/OS name selection pattern
+ */
+tSCC* apzSolaris_Gets_Cxx14Machs[] = {
+        "*-*-solaris2*",
+        (const char*)NULL };
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zSolaris_Gets_Cxx14Select0[] =
+       "(#if __STDC_VERSION__ < 201112L)\n\
+(extern char\t\\*gets\\(char \\*\\) __ATTR_DEPRECATED;)";
+
+#define    SOLARIS_GETS_CXX14_TEST_CT  1
+static tTestDesc aSolaris_Gets_Cxx14Tests[] = {
+  { TT_EGREP,    zSolaris_Gets_Cxx14Select0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Solaris_Gets_Cxx14
+ */
+static const char* apzSolaris_Gets_Cxx14Patch[] = {
+    "format",
+    "%1 && __cplusplus < 201402L\n\
+%2",
+    (char*)NULL };
+
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
  *  Description of Solaris_Int_Const fix
@@ -7818,6 +7896,45 @@ using std::__flsbuf;\n\
 %2",
     (char*)NULL };
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Solaris_Std_Gets_Cxx14 fix
+ */
+tSCC zSolaris_Std_Gets_Cxx14Name[] =
+     "solaris_std_gets_cxx14";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zSolaris_Std_Gets_Cxx14List[] =
+  "stdio.h\0";
+/*
+ *  Machine/OS name selection pattern
+ */
+tSCC* apzSolaris_Std_Gets_Cxx14Machs[] = {
+        "*-*-solaris2*",
+        (const char*)NULL };
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zSolaris_Std_Gets_Cxx14Select0[] =
+       "using std::gets;";
+
+#define    SOLARIS_STD_GETS_CXX14_TEST_CT  1
+static tTestDesc aSolaris_Std_Gets_Cxx14Tests[] = {
+  { TT_EGREP,    zSolaris_Std_Gets_Cxx14Select0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Solaris_Std_Gets_Cxx14
+ */
+static const char* apzSolaris_Std_Gets_Cxx14Patch[] = {
+    "format",
+    "#if __cplusplus < 201402L\n\
+%0\n\
+#endif",
+    (char*)NULL };
+
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
  *  Description of Solaris_Stdio_Tag fix
@@ -7859,6 +7976,43 @@ static const char* apzSolaris_Stdio_TagPatch[] = { sed_cmd_z,
     "-e", "s/defined(__cplusplus) && (__cplusplus < 54321L)/0/",
     (char*)NULL };
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Solaris_Stdlib_Noreturn fix
+ */
+tSCC zSolaris_Stdlib_NoreturnName[] =
+     "solaris_stdlib_noreturn";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zSolaris_Stdlib_NoreturnList[] =
+  "iso/stdlib_c99.h\0";
+/*
+ *  Machine/OS name selection pattern
+ */
+tSCC* apzSolaris_Stdlib_NoreturnMachs[] = {
+        "*-*-solaris2*",
+        (const char*)NULL };
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zSolaris_Stdlib_NoreturnSelect0[] =
+       "(extern) _Noreturn (void quick_exit\\(int\\));";
+
+#define    SOLARIS_STDLIB_NORETURN_TEST_CT  1
+static tTestDesc aSolaris_Stdlib_NoreturnTests[] = {
+  { TT_EGREP,    zSolaris_Stdlib_NoreturnSelect0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Solaris_Stdlib_Noreturn
+ */
+static const char* apzSolaris_Stdlib_NoreturnPatch[] = {
+    "format",
+    "%1 %2 __attribute__((__noreturn__));",
+    (char*)NULL };
+
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
  *  Description of Statsswtch fix
@@ -9908,9 +10062,9 @@ static const char* apzX11_SprintfPatch[] = {
  *
  *  List of all fixes
  */
-#define REGEX_COUNT          279
+#define REGEX_COUNT          283
 #define MACH_LIST_SIZE_LIMIT 187
-#define FIX_COUNT            242
+#define FIX_COUNT            246
 
 /*
  *  Enumerate the fixes
@@ -10087,6 +10241,8 @@ typedef enum {
     SOLARIS_COMPLEX_CXX_FIXIDX,
     SOLARIS_CXX_LINKAGE_FIXIDX,
     SOLARIS_GETC_STRICT_STDC_FIXIDX,
+    SOLARIS_GETS_C11_FIXIDX,
+    SOLARIS_GETS_CXX14_FIXIDX,
     SOLARIS_INT_CONST_FIXIDX,
     SOLARIS_INT_LIMITS_1_FIXIDX,
     SOLARIS_INT_LIMITS_2_FIXIDX,
@@ -10105,7 +10261,9 @@ typedef enum {
     SOLARIS_POW_INT_OVERLOAD_FIXIDX,
     SOLARIS_RWLOCK_INIT_1_FIXIDX,
     SOLARIS_STD___FILBUF_FIXIDX,
+    SOLARIS_STD_GETS_CXX14_FIXIDX,
     SOLARIS_STDIO_TAG_FIXIDX,
+    SOLARIS_STDLIB_NORETURN_FIXIDX,
     STATSSWTCH_FIXIDX,
     STDIO_STDARG_H_FIXIDX,
     STDIO_VA_LIST_FIXIDX,
@@ -11016,6 +11174,16 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
      SOLARIS_GETC_STRICT_STDC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aSolaris_Getc_Strict_StdcTests,   apzSolaris_Getc_Strict_StdcPatch, 0 },
 
+  {  zSolaris_Gets_C11Name,    zSolaris_Gets_C11List,
+     apzSolaris_Gets_C11Machs,
+     SOLARIS_GETS_C11_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aSolaris_Gets_C11Tests,   apzSolaris_Gets_C11Patch, 0 },
+
+  {  zSolaris_Gets_Cxx14Name,    zSolaris_Gets_Cxx14List,
+     apzSolaris_Gets_Cxx14Machs,
+     SOLARIS_GETS_CXX14_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aSolaris_Gets_Cxx14Tests,   apzSolaris_Gets_Cxx14Patch, 0 },
+
   {  zSolaris_Int_ConstName,    zSolaris_Int_ConstList,
      apzSolaris_Int_ConstMachs,
      SOLARIS_INT_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
@@ -11106,11 +11274,21 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
      SOLARIS_STD___FILBUF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aSolaris_Std___FilbufTests,   apzSolaris_Std___FilbufPatch, 0 },
 
+  {  zSolaris_Std_Gets_Cxx14Name,    zSolaris_Std_Gets_Cxx14List,
+     apzSolaris_Std_Gets_Cxx14Machs,
+     SOLARIS_STD_GETS_CXX14_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aSolaris_Std_Gets_Cxx14Tests,   apzSolaris_Std_Gets_Cxx14Patch, 0 },
+
   {  zSolaris_Stdio_TagName,    zSolaris_Stdio_TagList,
      apzSolaris_Stdio_TagMachs,
      SOLARIS_STDIO_TAG_TEST_CT, FD_MACH_ONLY,
      aSolaris_Stdio_TagTests,   apzSolaris_Stdio_TagPatch, 0 },
 
+  {  zSolaris_Stdlib_NoreturnName,    zSolaris_Stdlib_NoreturnList,
+     apzSolaris_Stdlib_NoreturnMachs,
+     SOLARIS_STDLIB_NORETURN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aSolaris_Stdlib_NoreturnTests,   apzSolaris_Stdlib_NoreturnPatch, 0 },
+
   {  zStatsswtchName,    zStatsswtchList,
      apzStatsswtchMachs,
      STATSSWTCH_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
index 240fc7437e69f90e50e308cd13d98c2662e54b77..03a267bd375623c521f49da25983c396506a94bd 100644 (file)
@@ -3592,6 +3592,43 @@ fix = {
     "#if       !defined(_REENTRANT) && !defined(_LP64) && !defined(_STRICT_STDC)";
 };
 
+/*
+ *  Solaris <iso/stdio_iso.h> should deprecate gets before C11.
+ */
+fix = {
+    hackname  = solaris_gets_c11;
+    mach      = "*-*-solaris2*";
+    files     = "iso/stdio_iso.h";
+    select    = "(extern char[ \t]*\\*gets\\(char \\*\\));";
+
+    c_fix     = format;
+    c_fix_arg = "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n"
+               "%1 __attribute__((__deprecated__));\n"
+               "#endif";
+
+    test_text = "extern char   *gets(char *);";
+};
+
+/*
+ *  Solaris <iso/stdio_iso.h> shouldn't declare gets for C++14.
+ */
+fix = {
+    hackname  = solaris_gets_cxx14;
+    mach      = "*-*-solaris2*";
+    files     = "iso/stdio_iso.h";
+    select    = <<- _EOSelect_
+(#if __STDC_VERSION__ < 201112L)
+(extern char   \*gets\(char \*\) __ATTR_DEPRECATED;)
+_EOSelect_;
+    c_fix     = format;
+    c_fix_arg = "%1 && __cplusplus < 201402L\n%2";
+
+    test_text = <<- _EOText_
+#if __STDC_VERSION__ < 201112L
+extern char    *gets(char *) __ATTR_DEPRECATED;
+_EOText_;
+};
+
 /*
  * Sun Solaris 2 has a version of sys/int_const.h that defines
  * UINT8_C and UINT16_C to unsigned constants.
@@ -3981,6 +4018,21 @@ fix = {
                "#endif";
 };
 
+/*
+ *  Solaris <stdio.h> shouldn't use std::gets for C++14.
+ */
+fix = {
+    hackname  = solaris_std_gets_cxx14;
+    mach      = "*-*-solaris2*";
+    files     = "stdio.h";
+    select    = "using std::gets;";
+
+    c_fix     = format;
+    c_fix_arg = "#if __cplusplus < 201402L\n%0\n#endif";
+
+    test_text = "using std::gets;";
+};
+
 /*
  * Sun Solaris 8 has what appears to be some gross workaround for
  * some old version of their c++ compiler.  G++ doesn't want it
@@ -3999,6 +4051,21 @@ fix = {
     test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)";
 };
 
+/*
+ *  Solaris <stdlib.h> shouldn't use _Noreturn, breaks with C++.
+ */
+fix = {
+    hackname  = solaris_stdlib_noreturn;
+    mach      = "*-*-solaris2*";
+    files     = "iso/stdlib_c99.h";
+    select    = "(extern) _Noreturn (void quick_exit\\(int\\));";
+
+    c_fix     = format;
+    c_fix_arg = "%1 %2 __attribute__((__noreturn__));";
+
+    test_text = "extern _Noreturn void quick_exit(int);";
+};
+
 /*
  *  a missing semi-colon at the end of the statsswtch structure definition.
  */
index d476752f092e60f7322eac1d86753a082a0046d1..e2d70b4c62ea64b1258905f8325df9dfa40da455 100644 (file)
 #if defined( SOLARIS_GETC_STRICT_STDC_CHECK )
 #if    !defined(_REENTRANT) && !defined(_LP64) && (!defined(_STRICT_STDC) || (__cplusplus >= 199711L))
 #endif  /* SOLARIS_GETC_STRICT_STDC_CHECK */
+
+
+#if defined( SOLARIS_GETS_C11_CHECK )
+#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L
+extern char    *gets(char *) __attribute__((__deprecated__));
+#endif
+#endif  /* SOLARIS_GETS_C11_CHECK */
+
+
+#if defined( SOLARIS_GETS_CXX14_CHECK )
+#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L
+extern char    *gets(char *) __ATTR_DEPRECATED;
+#endif  /* SOLARIS_GETS_CXX14_CHECK */
diff --git a/fixincludes/tests/base/iso/stdlib_c99.h b/fixincludes/tests/base/iso/stdlib_c99.h
new file mode 100644 (file)
index 0000000..0c500de
--- /dev/null
@@ -0,0 +1,14 @@
+/*  DO NOT EDIT THIS FILE.
+
+    It has been auto-edited by fixincludes from:
+
+       "fixinc/tests/inc/iso/stdlib_c99.h"
+
+    This had to be done to correct non-standard usages in the
+    original, manufacturer supplied header file.  */
+
+
+
+#if defined( SOLARIS_STDLIB_NORETURN_CHECK )
+extern void quick_exit(int) __attribute__((__noreturn__));
+#endif  /* SOLARIS_STDLIB_NORETURN_CHECK */
index 4ca4fafeb9516b71477f8ed085e005618f3ed091..491c75da6e5540b713942c7674f92e1dac4fc1da 100644 (file)
@@ -90,6 +90,13 @@ using std::__flsbuf;
 #endif  /* SOLARIS_STD___FILBUF_CHECK */
 
 
+#if defined( SOLARIS_STD_GETS_CXX14_CHECK )
+#if __cplusplus < 201402L
+using std::gets;
+#endif
+#endif  /* SOLARIS_STD_GETS_CXX14_CHECK */
+
+
 #if defined( STDIO_STDARG_H_CHECK )
 
 #endif  /* STDIO_STDARG_H_CHECK */