This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
ObjC++: fix for __PRETTY_FUNCTION__ on Dar win
- From: "Nicola Pero" <nicola dot pero at meta-innovation dot com>
- To: "gcc-patches at gnu dot org" <gcc-patches at gnu dot org>
- Date: Sun, 28 Nov 2010 18:45:16 +0100 (CET)
- Subject: ObjC++: fix for __PRETTY_FUNCTION__ on Dar win
This patch fixes the testcase demangle-2.mm on Mac OS X (problem reported by Iain, fix by me).
Ok to commit ?
Thanks
Index: objc-act.c
===================================================================
--- objc-act.c (revision 167220)
+++ objc-act.c (working copy)
@@ -12399,6 +12399,22 @@
{
char *demangled, *cp;
+ /* First of all, if the name is too short it can't be an Objective-C
+ mangled method name. */
+ if (mangled[0] == '\0' || mangled[1] == '\0' || mangled[2] == '\0')
+ return NULL;
+
+ /* If the name looks like an already demangled one, return it
+ unchanged. This should only happen on Darwin, where method names
+ are mangled differently into a pretty-print form (such as
+ '+[NSObject class]', see darwin.h). In that case, demangling is
+ a no-op, but we need to return the demangled name if it was an
+ ObjC one, and return NULL if not. We should be safe as no C/C++
+ function can start with "-[" or "+[". */
+ if ((mangled[0] == '-' || mangled[0] == '+')
+ && (mangled[1] == '['))
+ return mangled;
+
if (mangled[0] == '_' &&
(mangled[1] == 'i' || mangled[1] == 'c') &&
mangled[2] == '_')
Index: ChangeLog
===================================================================
--- ChangeLog (revision 167220)
+++ ChangeLog (working copy)
@@ -1,3 +1,9 @@
+2010-11-28 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc-act.c (objc_demangle): Return immediately if the string is
+ too short. Detect names that do not need demangling, and return
+ them unchanged.
+
2010-11-27 Nicola Pero <nicola.pero@meta-innovation.com>
Implemented optional properties.