--- /dev/null
+2016-02-20 Bernd Edlinger <bernd.edlinger@hotmail.de>\r
+\r
+ Backported from mainline\r
+ 2016-02-19 Jakub Jelinek <jakub@redhat.com>\r
+ Bernd Edlinger <bernd.edlinger@hotmail.de>\r
+\r
+ * Make-lang.in: Invoke gperf with -L C++.\r
+ * cfns.gperf: Remove prototypes for hash and libc_name_p\r
+ inlines.\r
+ * cfns.h: Regenerated.\r
+ * except.c (nothrow_libfn_p): Adjust.\r
+\r
+Index: gcc/cp/Make-lang.in\r
+===================================================================\r
+--- gcc/cp/Make-lang.in (revision 233574)\r
++++ gcc/cp/Make-lang.in (working copy)\r
+@@ -111,7 +111,7 @@ else\r
+ # deleting the $(srcdir)/cp/cfns.h file.\r
+ $(srcdir)/cp/cfns.h:\r
+ endif\r
+- gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \\r
++ gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \\r
+ $(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h\r
+ \r
+ #\f\r
+Index: gcc/cp/cfns.gperf\r
+===================================================================\r
+--- gcc/cp/cfns.gperf (revision 233574)\r
++++ gcc/cp/cfns.gperf (working copy)\r
+@@ -1,3 +1,5 @@\r
++%language=C++\r
++%define class-name libc_name\r
+ %{\r
+ /* Copyright (C) 2000-2015 Free Software Foundation, Inc.\r
+ \r
+@@ -16,14 +18,6 @@ for more details.\r
+ You should have received a copy of the GNU General Public License\r
+ along with GCC; see the file COPYING3. If not see\r
+ <http://www.gnu.org/licenses/>. */\r
+-#ifdef __GNUC__\r
+-__inline\r
+-#endif\r
+-static unsigned int hash (const char *, unsigned int);\r
+-#ifdef __GNUC__\r
+-__inline\r
+-#endif\r
+-const char * libc_name_p (const char *, unsigned int);\r
+ %}\r
+ %%\r
+ # The standard C library functions, for feeding to gperf; the result is used\r
+Index: gcc/cp/cfns.h\r
+===================================================================\r
+--- gcc/cp/cfns.h (revision 233574)\r
++++ gcc/cp/cfns.h (working copy)\r
+@@ -1,5 +1,5 @@\r
+-/* ANSI-C code produced by gperf version 3.0.3 */\r
+-/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L ANSI-C cfns.gperf */\r
++/* C++ code produced by gperf version 3.0.4 */\r
++/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L C++ --output-file cfns.h cfns.gperf */\r
+ \r
+ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \\r
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \\r
+@@ -28,7 +28,7 @@\r
+ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."\r
+ #endif\r
+ \r
+-#line 1 "cfns.gperf"\r
++#line 3 "cfns.gperf"\r
+ \r
+ /* Copyright (C) 2000-2015 Free Software Foundation, Inc.\r
+ \r
+@@ -47,26 +47,19 @@ for more details.\r
+ You should have received a copy of the GNU General Public License\r
+ along with GCC; see the file COPYING3. If not see\r
+ <http://www.gnu.org/licenses/>. */\r
+-#ifdef __GNUC__\r
+-__inline\r
+-#endif\r
+-static unsigned int hash (const char *, unsigned int);\r
+-#ifdef __GNUC__\r
+-__inline\r
+-#endif\r
+-const char * libc_name_p (const char *, unsigned int);\r
+ /* maximum key range = 391, duplicates = 0 */\r
+ \r
+-#ifdef __GNUC__\r
+-__inline\r
+-#else\r
+-#ifdef __cplusplus\r
+-inline\r
+-#endif\r
+-#endif\r
+-static unsigned int\r
+-hash (register const char *str, register unsigned int len)\r
++class libc_name\r
+ {\r
++private:\r
++ static inline unsigned int hash (const char *str, unsigned int len);\r
++public:\r
++ static const char *libc_name_p (const char *str, unsigned int len);\r
++};\r
++\r
++inline unsigned int\r
++libc_name::hash (register const char *str, register unsigned int len)\r
++{\r
+ static const unsigned short asso_values[] =\r
+ {\r
+ 400, 400, 400, 400, 400, 400, 400, 400, 400, 400,\r
+@@ -122,14 +115,8 @@ along with GCC; see the file COPYING3. If not see\r
+ return hval + asso_values[(unsigned char)str[len - 1]];\r
+ }\r
+ \r
+-#ifdef __GNUC__\r
+-__inline\r
+-#ifdef __GNUC_STDC_INLINE__\r
+-__attribute__ ((__gnu_inline__))\r
+-#endif\r
+-#endif\r
+ const char *\r
+-libc_name_p (register const char *str, register unsigned int len)\r
++libc_name::libc_name_p (register const char *str, register unsigned int len)\r
+ {\r
+ enum\r
+ {\r
+Index: gcc/cp/except.c\r
+===================================================================\r
+--- gcc/cp/except.c (revision 233574)\r
++++ gcc/cp/except.c (working copy)\r
+@@ -1040,7 +1040,8 @@ nothrow_libfn_p (const_tree fn)\r
+ unless the system headers are playing rename tricks, and if\r
+ they are, we don't want to be confused by them. */\r
+ id = DECL_NAME (fn);\r
+- return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));\r
++ return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),\r
++ IDENTIFIER_LENGTH (id));\r
+ }\r
+ \r
+ /* Returns nonzero if an exception of type FROM will be caught by a\r