[Lldb-commits] [lldb] r268083 - [fix] Fixed a bug where const this would cause parser errors about $__lldb_expr.

Sean Callanan via lldb-commits lldb-commits at lists.llvm.org
Fri Apr 29 11:09:03 PDT 2016


Author: spyffe
Date: Fri Apr 29 13:09:03 2016
New Revision: 268083

URL: http://llvm.org/viewvc/llvm-project?rev=268083&view=rev
Log:
[fix] Fixed a bug where const this would cause parser errors about $__lldb_expr.

In templated const functions, trying to run an expression would produce the
error

error: out-of-line definition of '$__lldb_expr' does not match any declaration
in 'foo' member declaration does not match because it is const qualified
error: 1 error parsing expression

which is no good.  It turned out we don't actually need to worry about "const,"
we just need to be consistent about the declaration of the expression and the
FunctionDecl we inject into the class for "this."

Also added a test case.

<rdar://problem/24985958>

Added:
    lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/Makefile
    lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/TestConstThis.py
    lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/main.cpp
Modified:
    lldb/trunk/include/lldb/Expression/ExpressionSourceCode.h
    lldb/trunk/source/Expression/ExpressionSourceCode.cpp
    lldb/trunk/source/Expression/LLVMUserExpression.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp

Modified: lldb/trunk/include/lldb/Expression/ExpressionSourceCode.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ExpressionSourceCode.h?rev=268083&r1=268082&r2=268083&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ExpressionSourceCode.h (original)
+++ lldb/trunk/include/lldb/Expression/ExpressionSourceCode.h Fri Apr 29 13:09:03 2016
@@ -54,7 +54,6 @@ public:
     
     bool GetText (std::string &text, 
                   lldb::LanguageType wrapping_language, 
-                  bool const_object,
                   bool static_method,
                   ExecutionContext &exe_ctx) const;
     

Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/Makefile?rev=268083&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/Makefile (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/Makefile Fri Apr 29 13:09:03 2016
@@ -0,0 +1,8 @@
+LEVEL = ../../../make
+CXX_SOURCES := main.cpp
+CXXFLAGS += -std=c++11
+include $(LEVEL)/Makefile.rules
+
+cleanup:
+	rm -f Makefile *.d
+

Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/TestConstThis.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/TestConstThis.py?rev=268083&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/TestConstThis.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/TestConstThis.py Fri Apr 29 13:09:03 2016
@@ -0,0 +1,4 @@
+from lldbsuite.test import lldbinline
+from lldbsuite.test import decorators
+
+lldbinline.MakeInlineTest(__file__, globals(), [decorators.expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24764")] )

Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/main.cpp?rev=268083&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/main.cpp (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/const_this/main.cpp Fri Apr 29 13:09:03 2016
@@ -0,0 +1,23 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <stdio.h>
+
+class foo {
+public:
+  template <class T> T func(T x) const {
+    return x+2; //% self.expect("expr 2+3", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["5"])
+  }
+};
+
+int i;
+
+int main() {
+  return foo().func(i);
+}

Modified: lldb/trunk/source/Expression/ExpressionSourceCode.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ExpressionSourceCode.cpp?rev=268083&r1=268082&r2=268083&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ExpressionSourceCode.cpp (original)
+++ lldb/trunk/source/Expression/ExpressionSourceCode.cpp Fri Apr 29 13:09:03 2016
@@ -195,7 +195,7 @@ AddLocalVariableDecls(const lldb::Variab
     }
 }
 
-bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool const_object, bool static_method, ExecutionContext &exe_ctx) const
+bool ExpressionSourceCode::GetText (std::string &text, lldb::LanguageType wrapping_language, bool static_method, ExecutionContext &exe_ctx) const
 {
     const char *target_specific_defines = "typedef signed char BOOL;\n";
     std::string module_macros;
@@ -337,13 +337,12 @@ bool ExpressionSourceCode::GetText (std:
             break;
         case lldb::eLanguageTypeC_plus_plus:
             wrap_stream.Printf("void                                   \n"
-                               "$__lldb_class::%s(void *$__lldb_arg) %s\n"
+                               "$__lldb_class::%s(void *$__lldb_arg)   \n"
                                "{                                      \n"
                                "    %s;                                \n"
                                "%s"
                                "}                                      \n",
                                m_name.c_str(),
-                               (const_object ? "const" : ""),
                                lldb_local_var_decls.GetData(),
                                tagged_body.c_str());
             break;

Modified: lldb/trunk/source/Expression/LLVMUserExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/LLVMUserExpression.cpp?rev=268083&r1=268082&r2=268083&view=diff
==============================================================================
--- lldb/trunk/source/Expression/LLVMUserExpression.cpp (original)
+++ lldb/trunk/source/Expression/LLVMUserExpression.cpp Fri Apr 29 13:09:03 2016
@@ -59,7 +59,6 @@ LLVMUserExpression::LLVMUserExpression(E
       m_in_objectivec_method(false),
       m_in_static_method(false),
       m_needs_object_ptr(false),
-      m_const_object(false),
       m_target(NULL),
       m_can_interpret(false),
       m_materialized_address(LLDB_INVALID_ADDRESS)

Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp?rev=268083&r1=268082&r2=268083&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp Fri Apr 29 13:09:03 2016
@@ -2213,10 +2213,10 @@ ClangExpressionDeclMap::AddThisType(Name
 {
     CompilerType copied_clang_type = GuardedCopyType(ut);
 
+    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
+
     if (!copied_clang_type)
     {
-        Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
-
         if (log)
             log->Printf("ClangExpressionDeclMap::AddThisType - Couldn't import the type");
 
@@ -2233,7 +2233,7 @@ ClangExpressionDeclMap::AddThisType(Name
                                                                         &void_ptr_clang_type,
                                                                         1,
                                                                         false,
-                                                                        copied_clang_type.GetTypeQualifiers());
+                                                                        0);
 
         const bool is_virtual = false;
         const bool is_static = false;
@@ -2242,7 +2242,7 @@ ClangExpressionDeclMap::AddThisType(Name
         const bool is_attr_used = true;
         const bool is_artificial = false;
 
-        ClangASTContext::GetASTContext(m_ast_context)->
+        CXXMethodDecl *method_decl = ClangASTContext::GetASTContext(m_ast_context)->
             AddMethodToCXXRecordType (copied_clang_type.GetOpaqueQualType(),
                                       "$__lldb_expr",
                                       method_type,
@@ -2253,6 +2253,16 @@ ClangExpressionDeclMap::AddThisType(Name
                                       is_explicit,
                                       is_attr_used,
                                       is_artificial);
+        
+        if (log)
+        {
+            ASTDumper method_ast_dumper((clang::Decl*)method_decl);
+            ASTDumper type_ast_dumper(copied_clang_type);
+        
+            log->Printf("  CEDM::AddThisType Added function $__lldb_expr (description %s) for this type %s",
+                        method_ast_dumper.GetCString(),
+                        type_ast_dumper.GetCString());
+        }
     }
 
     if (!copied_clang_type.IsValid())

Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp?rev=268083&r1=268082&r2=268083&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp (original)
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp Fri Apr 29 13:09:03 2016
@@ -417,7 +417,7 @@ ClangUserExpression::Parse(DiagnosticMan
         else
             lang_type = lldb::eLanguageTypeC;
 
-        if (!source_code->GetText(m_transformed_text, lang_type, m_const_object, m_in_static_method, exe_ctx))
+        if (!source_code->GetText(m_transformed_text, lang_type, m_in_static_method, exe_ctx))
         {
             diagnostic_manager.PutCString(eDiagnosticSeverityError, "couldn't construct expression body");
             return false;




More information about the lldb-commits mailing list