[Lldb-commits] [lldb] r176274 - Made lldb.cpp build with clang 5.0.

Greg Clayton gclayton at apple.com
Thu Feb 28 10:09:18 PST 2013


Author: gclayton
Date: Thu Feb 28 12:09:18 2013
New Revision: 176274

URL: http://llvm.org/viewvc/llvm-project?rev=176274&view=rev
Log:
Made lldb.cpp build with clang 5.0. 

Also removed the use of llvm::raw_string_ostream as it wasn't needed. 

Also fixed a crasher that could occur when the following line returned a C string tied to a local variable:

    return OS.str().c_str();

I am guessing "static std::string buf;" was supposed to get assigned to "OS.str()" and then have "buf.c_str()" returned. 

Modified the non-apple version code to cache its value and not recompute the version every time.


Modified:
    lldb/trunk/source/lldb.cpp

Modified: lldb/trunk/source/lldb.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/lldb.cpp?rev=176274&r1=176273&r2=176274&view=diff
==============================================================================
--- lldb/trunk/source/lldb.cpp (original)
+++ lldb/trunk/source/lldb.cpp Thu Feb 28 12:09:18 2013
@@ -7,8 +7,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "clang/Basic/Version.h"
-
 #include "lldb/lldb-python.h"
 
 #include "lldb/lldb-private.h"
@@ -25,7 +23,6 @@
 #include "lldb/Target/Thread.h"
 
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/raw_ostream.h"
 
 #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
 #include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
@@ -80,26 +77,6 @@
 using namespace lldb;
 using namespace lldb_private;
 
-namespace {
-
-std::string getLLDBRevision() {
-#ifdef LLDB_REVISION
-  return LLDB_REVISION;
-#else
-  return "";
-#endif
-}
-
-std::string getLLDBRepository() {
-#ifdef LLDB_REPOSITORY
-  return LLDB_REPOSITORY;
-#else
-  return "";
-#endif
-}
-
-}
-
 void
 lldb_private::Initialize ()
 {
@@ -250,6 +227,30 @@ lldb_private::Terminate ()
 
 #if defined (__APPLE__)
 extern "C" const double liblldb_coreVersionNumber;
+#else
+
+#include "clang/Basic/Version.h"
+
+static const char *
+GetLLDBRevision()
+{
+#ifdef LLDB_REVISION
+    return LLDB_REVISION;
+#else
+    return NULL;
+#endif
+}
+
+static const char *
+GetLLDBRepository()
+{
+#ifdef LLDB_REPOSITORY
+    return LLDB_REPOSITORY;
+#else
+    return NULL;
+#endif
+}
+
 #endif
 
 const char *
@@ -263,30 +264,41 @@ lldb_private::GetVersion ()
     return g_version_string;
 #else
     // On Linux/FreeBSD/Windows, report a version number in the same style as the clang tool.
-    static std::string buf;
-    llvm::raw_string_ostream OS(buf);
-    OS << "lldb version " CLANG_VERSION_STRING " ";
-
-    std::string lldb_repo = getLLDBRepository();
-    if (lldb_repo.length() > 0)
-        OS << "(" << lldb_repo;
-
-    std::string lldb_rev = getLLDBRevision();
-    if (lldb_rev.length() > 0)
-        OS << " revision " << lldb_rev;
-
-    std::string clang_rev = clang::getClangRevision();
-    if (clang_rev.length() > 0)
-        OS << " clang revision " << clang_rev;
-
-    std::string llvm_rev = clang::getLLVMRevision();
-    if (llvm_rev.length() > 0)
-        OS << " llvm revision " << llvm_rev;
-
-    if (lldb_repo.length() > 0)
-        OS << ")";
+    static std::string g_version_str;
+    if (g_version_str.empty())
+    {
+        g_version_str += "lldb version ";
+        g_version_str += CLANG_VERSION_STRING;
+        const char * lldb_repo = GetLLDBRepository();
+        if (lldb_repo)
+        {
+            g_version_str += " (";
+            g_version_str += lldb_repo;
+        }
+
+        const char *lldb_rev = GetLLDBRevision();
+        if (lldb_rev)
+        {
+            g_version_str += " revision ";
+            g_version_str += lldb_rev;
+        }
+        std::string clang_rev (clang::getClangRevision());
+        if (clang_rev.length() > 0)
+        {
+            g_version_str += " clang revision ";
+            g_version_str += clang_rev;
+        }
+        std::string llvm_rev (clang::getLLVMRevision());
+        if (llvm_rev.length() > 0)
+        {
+            g_version_str += " llvm revision ";
+            g_version_str += llvm_rev;
+        }
 
-    return OS.str().c_str();
+        if (lldb_repo)
+            g_version_str += ")";
+    }
+    return g_version_str.c_str();
 #endif
 }
 





More information about the lldb-commits mailing list