Demangling issues with libcxxrt.so.1 on v9.2

From: Ivan A. Kosarev <ivan_at_ivan-labs.com>
Date: Tue, 15 Jul 2014 17:11:15 +0400
Hello everybody,

It seems there are problems with demandling some kinds of names with 
libcxxrt.so.1 on FreeBSD 9.2 (I didn't test other versions yet).

This program:
---
#include <stdio.h>
#include <stdlib.h>

extern "C" char* __cxa_demangle(const char* mangled_name,
                      char* buf, size_t* n, int* status);

void test(const char *mangled) {
   int status = 0;
   char *DemangledName = __cxa_demangle(mangled, NULL, NULL, &status);
   printf("%s: status %d", mangled, status);
   if(status == 0)
     printf("; demangled: '%s'", DemangledName);
   free(DemangledName);
   printf("\n");
}

int main(void) {
   test("_Z9NullDerefPi");
   test("_ZL9NullDerefPi");
   test("_ZN8DeepFreeILi0EE4freeEPc");
   test("_ZN8DeepFreeILi13EE4freeEPc");
   test("_ZN8DeepFreeILi36EE4freeEPc");
   return 0;
}
---

outputs:
---
_Z9NullDerefPi: status 0; demangled: 'NullDeref(int*)'
_ZL9NullDerefPi: status -2
_ZN8DeepFreeILi0EE4freeEPc: status 0; demangled: 'DeepFree<0E>::free(char*)'
_ZN8DeepFreeILi13EE4freeEPc: status 0; demangled: 
'DeepFree<13E>::free(char*)'
_ZN8DeepFreeILi36EE4freeEPc: status 0; demangled: 
'DeepFree<36E>::free(char*)'
---

Note that it fails to demangle the local name in the 2nd line and adds 
extra 'E' character in DeepFree<...E>s.

The case with the local name is not critical, but the case with 
DeepFree<...E> prevents LLVM's address sanitizer tests from passing on 
FreeBSD so the question is: is there a chance the defect will be 
resolved any time soon or should I try to prepare a fix to speed up the 
process?

Thanks a lot.

-- 
Received on Tue Jul 15 2014 - 11:19:46 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:50 UTC