[Lldb-commits] [lldb] r238496 - Revert "Allow both MSVC and Itanium mangling schemes."

Ying Chen chying at google.com
Thu May 28 14:06:33 PDT 2015


Author: chying
Date: Thu May 28 16:06:33 2015
New Revision: 238496

URL: http://llvm.org/viewvc/llvm-project?rev=238496&view=rev
Log:
Revert "Allow both MSVC and Itanium mangling schemes."
Cause build break.

This reverts commit 6d986061393f2863fec739e04412281148acc1f3.

Modified:
    lldb/trunk/include/lldb/Core/Mangled.h
    lldb/trunk/source/Core/CxaDemangle.cpp
    lldb/trunk/source/Core/Mangled.cpp

Modified: lldb/trunk/include/lldb/Core/Mangled.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Mangled.h?rev=238496&r1=238495&r2=238496&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/Mangled.h (original)
+++ lldb/trunk/include/lldb/Core/Mangled.h Thu May 28 16:06:33 2015
@@ -41,13 +41,6 @@ public:
         ePreferDemangledWithoutArguments
     };
 
-    enum ManglingScheme
-    {
-        eManglingSchemeNone = 0,
-        eManglingSchemeMSVC,
-        eManglingSchemeItanium
-    };
-
     //----------------------------------------------------------------------
     /// Default constructor.
     ///

Modified: lldb/trunk/source/Core/CxaDemangle.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/CxaDemangle.cpp?rev=238496&r1=238495&r2=238496&view=diff
==============================================================================
--- lldb/trunk/source/Core/CxaDemangle.cpp (original)
+++ lldb/trunk/source/Core/CxaDemangle.cpp Thu May 28 16:06:33 2015
@@ -8,18 +8,9 @@
 // - Stripped GCC attributes()
 // - Removed extern "C" from the cxa_demangle function
 // - Added "#undef _LIBCPP_EXTERN_TEMPLATE" to avoid warning
-// - Implemented missing rebind, construct, destroy in malloc_alloc
-// - Replaced noexcept, constexpr, alignas with their LLVM_* equivalents
-// - Included win32.h for snprintf implementation for MSVC
-// - Removed constexpr member initialization for MSVC
-// - Changed argument to alignas() to a literal for MSVC
 //----------------------------------------------------------------------
 
-#if defined(_MSC_VER)
-#include "lldb/Host/windows/win32.h" // snprintf
-#endif
-#include "llvm/Support/Compiler.h"   // LLVM_{NOEXCEPT, CONSTEXPR, ALIGNAS}
-#undef _LIBCPP_EXTERN_TEMPLATE       // Avoid warning below
+#undef _LIBCPP_EXTERN_TEMPLATE // Avoid warning below
 
 //===-------------------------- cxa_demangle.cpp --------------------------===//
 //
@@ -161,20 +152,20 @@ struct float_data<float>
 {
     static const size_t mangled_size = 8;
     static const size_t max_demangled_size = 24;
-    static const char* spec;
+    static constexpr const char* spec = "%af";
 };
 
-const char* float_data<float>::spec = "%af";
+constexpr const char* float_data<float>::spec;
 
 template <>
 struct float_data<double>
 {
     static const size_t mangled_size = 16;
     static const size_t max_demangled_size = 32;
-    static const char* spec;
+    static constexpr const char* spec = "%a";
 };
 
-const char* float_data<double>::spec = "%a";
+constexpr const char* float_data<double>::spec;
 
 template <>
 struct float_data<long double>
@@ -185,10 +176,10 @@ struct float_data<long double>
     static const size_t mangled_size = 20;  // May need to be adjusted to 16 or 24 on other platforms
 #endif
     static const size_t max_demangled_size = 40;
-    static const char* spec;
+    static constexpr const char* spec = "%LaL";
 };
 
-const char* float_data<long double>::spec = "%LaL";
+constexpr const char* float_data<long double>::spec;
 
 template <class Float, class C>
 const char*
@@ -4731,27 +4722,27 @@ template <std::size_t N>
 class arena
 {
     static const std::size_t alignment = 16;
-    LLVM_ALIGNAS(16) char buf_[N];
+    alignas(alignment) char buf_[N];
     char* ptr_;
 
     std::size_t 
-    align_up(std::size_t n) LLVM_NOEXCEPT
+    align_up(std::size_t n) noexcept
         {return (n + (alignment-1)) & ~(alignment-1);}
 
     bool
-    pointer_in_buffer(char* p) LLVM_NOEXCEPT
+    pointer_in_buffer(char* p) noexcept
         {return buf_ <= p && p <= buf_ + N;}
 
 public:
-    arena() LLVM_NOEXCEPT : ptr_(buf_) {}
+    arena() noexcept : ptr_(buf_) {}
     ~arena() {ptr_ = nullptr;}
     arena(const arena&) = delete;
     arena& operator=(const arena&) = delete;
 
     char* allocate(std::size_t n);
-    void deallocate(char* p, std::size_t n) LLVM_NOEXCEPT;
+    void deallocate(char* p, std::size_t n) noexcept;
 
-    static LLVM_CONSTEXPR std::size_t size() {return N;}
+    static constexpr std::size_t size() {return N;}
     std::size_t used() const {return static_cast<std::size_t>(ptr_ - buf_);}
     void reset() {ptr_ = buf_;}
 };
@@ -4772,7 +4763,7 @@ arena<N>::allocate(std::size_t n)
 
 template <std::size_t N>
 void
-arena<N>::deallocate(char* p, std::size_t n) LLVM_NOEXCEPT
+arena<N>::deallocate(char* p, std::size_t n) noexcept
 {
     if (pointer_in_buffer(p))
     {
@@ -4794,9 +4785,9 @@ public:
 public:
     template <class _Up> struct rebind {typedef short_alloc<_Up, N> other;};
 
-    short_alloc(arena<N>& a) LLVM_NOEXCEPT : a_(a) {}
+    short_alloc(arena<N>& a) noexcept : a_(a) {}
     template <class U>
-        short_alloc(const short_alloc<U, N>& a) LLVM_NOEXCEPT
+        short_alloc(const short_alloc<U, N>& a) noexcept
             : a_(a.a_) {}
     short_alloc(const short_alloc&) = default;
     short_alloc& operator=(const short_alloc&) = delete;
@@ -4805,7 +4796,7 @@ public:
     {
         return reinterpret_cast<T*>(a_.allocate(n*sizeof(T)));
     }
-    void deallocate(T* p, std::size_t n) LLVM_NOEXCEPT
+    void deallocate(T* p, std::size_t n) noexcept
     {
         a_.deallocate(reinterpret_cast<char*>(p), n*sizeof(T));
     }
@@ -4813,7 +4804,7 @@ public:
     template <class T1, std::size_t N1, class U, std::size_t M>
     friend
     bool
-    operator==(const short_alloc<T1, N1>& x, const short_alloc<U, M>& y) LLVM_NOEXCEPT;
+    operator==(const short_alloc<T1, N1>& x, const short_alloc<U, M>& y) noexcept;
 
     template <class U, std::size_t M> friend class short_alloc;
 };
@@ -4821,7 +4812,7 @@ public:
 template <class T, std::size_t N, class U, std::size_t M>
 inline
 bool
-operator==(const short_alloc<T, N>& x, const short_alloc<U, M>& y) LLVM_NOEXCEPT
+operator==(const short_alloc<T, N>& x, const short_alloc<U, M>& y) noexcept
 {
     return N == M && &x.a_ == &y.a_;
 }
@@ -4829,7 +4820,7 @@ operator==(const short_alloc<T, N>& x, c
 template <class T, std::size_t N, class U, std::size_t M>
 inline
 bool
-operator!=(const short_alloc<T, N>& x, const short_alloc<U, M>& y) LLVM_NOEXCEPT
+operator!=(const short_alloc<T, N>& x, const short_alloc<U, M>& y) noexcept
 {
     return !(x == y);
 }
@@ -4841,39 +4832,22 @@ public:
     typedef T value_type;
 
     malloc_alloc() = default;
-    template <class U> malloc_alloc(const malloc_alloc<U>&) LLVM_NOEXCEPT {}
+    template <class U> malloc_alloc(const malloc_alloc<U>&) noexcept {}
 
     T* allocate(std::size_t n)
     {
         return static_cast<T*>(std::malloc(n*sizeof(T)));
     }
-    void deallocate(T* p, std::size_t) LLVM_NOEXCEPT
+    void deallocate(T* p, std::size_t) noexcept
     {
         std::free(p);
     }
-    template<class Other>
-    struct rebind
-    {
-        typedef malloc_alloc<Other> other;
-    };
-    void construct(T *p)
-    {
-        ::new (p) T();
-    }
-    void construct(T *p, const T& t)
-    {
-        ::new (p) T(t);
-    }
-    void destroy(T *p)
-    {
-        p->~T();
-    }
 };
 
 template <class T, class U>
 inline
 bool
-operator==(const malloc_alloc<T>&, const malloc_alloc<U>&) LLVM_NOEXCEPT
+operator==(const malloc_alloc<T>&, const malloc_alloc<U>&) noexcept
 {
     return true;
 }
@@ -4881,7 +4855,7 @@ operator==(const malloc_alloc<T>&, const
 template <class T, class U>
 inline
 bool
-operator!=(const malloc_alloc<T>& x, const malloc_alloc<U>& y) LLVM_NOEXCEPT
+operator!=(const malloc_alloc<T>& x, const malloc_alloc<U>& y) noexcept
 {
     return !(x == y);
 }

Modified: lldb/trunk/source/Core/Mangled.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Mangled.cpp?rev=238496&r1=238495&r2=238496&view=diff
==============================================================================
--- lldb/trunk/source/Core/Mangled.cpp (original)
+++ lldb/trunk/source/Core/Mangled.cpp Thu May 28 16:06:33 2015
@@ -13,7 +13,6 @@
 #if defined(_MSC_VER)
 #include "lldb/Host/windows/windows.h"
 #include <Dbghelp.h>
-#define LLDB_USE_BUILTIN_DEMANGLER
 #elif defined (__FreeBSD__)
 #define LLDB_USE_BUILTIN_DEMANGLER
 #else
@@ -45,23 +44,16 @@
 
 using namespace lldb_private;
 
-static inline Mangled::ManglingScheme
-cstring_mangling_scheme(const char *s)
-{
-    if (s)
-    {
-        if (s[0] == '?')
-            return Mangled::eManglingSchemeMSVC;
-        if (s[0] == '_' && s[1] == 'Z')
-            return Mangled::eManglingSchemeItanium;
-    }
-    return Mangled::eManglingSchemeNone;
-}
-
 static inline bool
-cstring_is_mangled(const char *s)
+cstring_is_mangled (const char *s)
 {
-    return cstring_mangling_scheme(s) != Mangled::eManglingSchemeNone;
+    if (s)
+#if defined(_MSC_VER)
+        return (s[0] == '?');
+#else
+        return (s[0] == '_' && s[1] == 'Z');
+#endif
+    return false;
 }
 
 static const ConstString &
@@ -272,58 +264,45 @@ Mangled::GetDemangledName () const
                             m_mangled.GetCString());
 
         // Don't bother running anything that isn't mangled
-        const char *mangled_name = m_mangled.GetCString();
-        ManglingScheme mangling_scheme{cstring_mangling_scheme(mangled_name)};
-        if (mangling_scheme != eManglingSchemeNone &&
-            !m_mangled.GetMangledCounterpart(m_demangled))
+        const char *mangled_cstr = m_mangled.GetCString();
+        if (cstring_is_mangled(mangled_cstr))
         {
-            // We didn't already mangle this name, demangle it and if all goes well
-            // add it to our map.
-            char *demangled_name = nullptr;
-            switch (mangling_scheme)
+            if (!m_mangled.GetMangledCounterpart(m_demangled))
             {
-                case eManglingSchemeMSVC:
+                // We didn't already mangle this name, demangle it and if all goes well
+                // add it to our map.
+#ifdef LLDB_USE_BUILTIN_DEMANGLER
+                // Try to use the fast-path demangler first for the
+                // performance win, falling back to the full demangler only
+                // when necessary
+                char *demangled_name = FastDemangle (mangled_cstr,
+                                                     m_mangled.GetLength());
+                if (!demangled_name)
+                    demangled_name = __cxa_demangle (mangled_cstr, NULL, NULL, NULL);
+#elif defined(_MSC_VER)
+                char *demangled_name = (char *)::malloc(1024);
+                ::ZeroMemory(demangled_name, 1024);
+                DWORD result = ::UnDecorateSymbolName(mangled_cstr, demangled_name, 1023,
+                                                      UNDNAME_NO_ACCESS_SPECIFIERS |       // Strip public, private, protected keywords
+                                                          UNDNAME_NO_ALLOCATION_LANGUAGE | // Strip __thiscall, __stdcall, etc keywords
+                                                          UNDNAME_NO_THROW_SIGNATURES |    // Strip throw() specifications
+                                                          UNDNAME_NO_MEMBER_TYPE |         // Strip virtual, static, etc specifiers
+                                                          UNDNAME_NO_MS_KEYWORDS           // Strip all MS extension keywords
+                                                      );
+                if (result == 0)
                 {
-#if defined(_MSC_VER)
-                    const size_t demangled_length = 2048;
-                    demangled_name = static_cast<char *>(::malloc(demangled_length));
-                    ::ZeroMemory(demangled_name, demangled_length);
-                    DWORD result = ::UnDecorateSymbolName(mangled_name, demangled_name, demangled_length,
-                            UNDNAME_NO_ACCESS_SPECIFIERS   | // Strip public, private, protected keywords
-                            UNDNAME_NO_ALLOCATION_LANGUAGE | // Strip __thiscall, __stdcall, etc keywords
-                            UNDNAME_NO_THROW_SIGNATURES    | // Strip throw() specifications
-                            UNDNAME_NO_MEMBER_TYPE         | // Strip virtual, static, etc specifiers
-                            UNDNAME_NO_MS_KEYWORDS           // Strip all MS extension keywords
-                        );
-                    if (result == 0)
-                    {
-                        free(demangled_name);
-                        demangled_name = nullptr;
-                    }
-#endif
-                    break;
+                    free (demangled_name);
+                    demangled_name = nullptr;
                 }
-                case eManglingSchemeItanium:
-                {
-#ifdef LLDB_USE_BUILTIN_DEMANGLER
-                    // Try to use the fast-path demangler first for the
-                    // performance win, falling back to the full demangler only
-                    // when necessary
-                    demangled_name = FastDemangle(mangled_name, m_mangled.GetLength());
-                    if (!demangled_name)
-                        demangled_name = __cxa_demangle(mangled_name, NULL, NULL, NULL);
 #else
-                    demangled_name = abi::__cxa_demangle(mangled_name, NULL, NULL, NULL);
+                char *demangled_name = abi::__cxa_demangle (mangled_cstr, NULL, NULL, NULL);
 #endif
-                    break;
+
+                if (demangled_name)
+                {
+                    m_demangled.SetCStringWithMangledCounterpart(demangled_name, m_mangled);
+                    free (demangled_name);
                 }
-                case eManglingSchemeNone:
-                    break;
-            }
-            if (demangled_name)
-            {
-                m_demangled.SetCStringWithMangledCounterpart(demangled_name, m_mangled);
-                free(demangled_name);
             }
         }
         if (!m_demangled)





More information about the lldb-commits mailing list