diff options
-rw-r--r-- | lib/VMCore/Mangler.cpp | 5 | ||||
-rw-r--r-- | test/FrontendObjC/2009-08-17-DebugInfo.m | 30 |
2 files changed, 33 insertions, 2 deletions
diff --git a/lib/VMCore/Mangler.cpp b/lib/VMCore/Mangler.cpp index 44cf778266..8c918434e3 100644 --- a/lib/VMCore/Mangler.cpp +++ b/lib/VMCore/Mangler.cpp @@ -105,8 +105,9 @@ std::string Mangler::makeNameProper(const std::string &X, return Result; } - - Result = X.substr(0, I-X.begin()); + + if (NeedPrefix) + Result = X.substr(0, I-X.begin()); // Otherwise, construct the string the expensive way. for (std::string::const_iterator E = X.end(); I != E; ++I) { diff --git a/test/FrontendObjC/2009-08-17-DebugInfo.m b/test/FrontendObjC/2009-08-17-DebugInfo.m new file mode 100644 index 0000000000..cf962384f6 --- /dev/null +++ b/test/FrontendObjC/2009-08-17-DebugInfo.m @@ -0,0 +1,30 @@ +// This is a regression test on debug info to make sure that we can set a +// breakpoint on a objective message. +// RUN: %llvmgcc -S -O0 -g %s -o - | llvm-as | llc -o %t.s -f -O0 +// RUN: %compile_c %t.s -o %t.o +// RUN: %link %t.o -o %t.exe -framework Foundation +// RUN: echo {break randomFunc\n} > %t.in +// RUN: gdb -q -batch -n -x %t.in %t.exe | tee %t.out | \ +// RUN: grep {Breakpoint 1 at 0x.*: file 2009-08-17-DebugInfo.m, line 22} +// XTARGETS: darwin +@interface MyClass +{ + int my; +} ++ init; +- randomFunc; +@end + +@implementation MyClass ++ init { +} +- randomFunc { + my = 42; +} +@end + +int main() { + id o = [MyClass init]; + [o randomFunc]; + return 0; +} |