Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/sys Stop mangling __func__ for C++11 and newer



details:   https://anonhg.NetBSD.org/src/rev/a5eb53024175
branches:  trunk
changeset: 446430:a5eb53024175
user:      kamil <kamil%NetBSD.org@localhost>
date:      Tue Dec 04 22:06:36 2018 +0000

description:
Stop mangling __func__ for C++11 and newer

Drop local logic between GCC 2.4 and GCC 2.6 that used __PRETTY_FUNCTION__.
This caused __func__ to be redefined for all C++ programs and use a
different behavior than intended by the compiler (Clang and GCC).
__PRETTY_FUNCTION__ prints all the prototype not just function name,
contrary to __FUNCTION__ and __func__.

__func__ is now an integral part of C99 and C++11, shipped by a compiler.

This change aligns the behavior of C++ programs using __func__ to other
Operating Systems. The difference caused unnecessary fallout in regression
test suites in projects (LLVM, fish, ...).

diffstat:

 sys/sys/cdefs.h |  14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)

diffs (33 lines):

diff -r d5ec47076aef -r a5eb53024175 sys/sys/cdefs.h
--- a/sys/sys/cdefs.h   Tue Dec 04 21:16:54 2018 +0000
+++ b/sys/sys/cdefs.h   Tue Dec 04 22:06:36 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cdefs.h,v 1.137 2018/08/22 12:07:43 maxv Exp $ */
+/*     $NetBSD: cdefs.h,v 1.138 2018/12/04 22:06:36 kamil Exp $        */
 
 /* * Copyright (c) 1991, 1993
  *     The Regents of the University of California.  All rights reserved.
@@ -414,18 +414,16 @@
 #endif
 
 /*
- * C99 defines __func__ predefined identifier, which was made available
- * in GCC 2.95.
+ * C99 and C++11 define __func__ predefined identifier, which was made
+ * available in GCC 2.95.
  */
-#if !(__STDC_VERSION__ >= 199901L)
-#if __GNUC_PREREQ__(2, 6)
-#define        __func__        __PRETTY_FUNCTION__
-#elif __GNUC_PREREQ__(2, 4)
+#if !(__STDC_VERSION__ >= 199901L) && !(__cplusplus - 0 >= 201103L)
+#if __GNUC_PREREQ__(2, 4)
 #define        __func__        __FUNCTION__
 #else
 #define        __func__        ""
 #endif
-#endif /* !(__STDC_VERSION__ >= 199901L) */
+#endif /* !(__STDC_VERSION__ >= 199901L) && !(__cplusplus - 0 >= 201103L) */
 
 #if defined(_KERNEL)
 #if defined(NO_KERNEL_RCSIDS)



Home | Main Index | Thread Index | Old Index