Improve demangler to compile with MSVC.

llvm-svn: 205769
diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp
index 60cd80f..3da10e5 100644
--- a/lldb/source/Core/Mangled.cpp
+++ b/lldb/source/Core/Mangled.cpp
@@ -11,7 +11,13 @@
 // FreeBSD9-STABLE requires this to know about size_t in cxxabi.h
 #include <cstddef>
 #if defined(_MSC_VER) 
-// Cannot enable the builtin demangler on msvc as it does not support the cpp11 within the implementation.
+#define LLDB_USE_BUILTIN_DEMANGLER
+// MSVC doesn't support constexpr, alignas, __attribute__ and noexcept yet
+#define constexpr
+#define alignas(X)
+#define __attribute__(X)
+#define noexcept
+#define snprintf _snprintf
 #elif defined (__FreeBSD__)
 #define LLDB_USE_BUILTIN_DEMANGLER
 #else
@@ -173,30 +179,30 @@
 {
     static const size_t mangled_size = 8;
     static const size_t max_demangled_size = 24;
-    static constexpr const char* spec = "%af";
+    static constexpr const char* spec;
 };
 
-constexpr const char* float_data<float>::spec;
+constexpr const char* float_data<float>::spec = "%af";
 
 template <>
 struct float_data<double>
 {
     static const size_t mangled_size = 16;
     static const size_t max_demangled_size = 32;
-    static constexpr const char* spec = "%a";
+    static constexpr const char* spec;
 };
 
-constexpr const char* float_data<double>::spec;
+constexpr const char* float_data<double>::spec = "%a";
 
 template <>
 struct float_data<long double>
 {
     static const size_t mangled_size = 20;  // May need to be adjusted to 16 or 24 on other platforms
     static const size_t max_demangled_size = 40;
-    static constexpr const char* spec = "%LaL";
+    static constexpr const char* spec;
 };
 
-constexpr const char* float_data<long double>::spec;
+constexpr const char* float_data<long double>::spec = "%LaL";
 
 template <class Float, class C>
 const char*