[Lldb-commits] [PATCH] D116009: [lldb/gdb-remote] drop all junk bytes in incoming packet

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

The find_first_of solution does look better. For the test, I /think/ it would 
be sufficient to add a new case to the test in 
`unittests/Process/gdb-remote/GDBRemoteCommunicationTest.cpp`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116009/new/

https://reviews.llvm.org/D116009

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D115925: [lldb/python] Fix (some) dangling pointers in our glue code

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

Thanks. In case anyone's wondering, the reason for that stray command is 
because I originally wanted to test this via `use_debugger` command. However, 
that turned out to not work because the SBDebugger object for the 
`use_debugger`s own argument was created at the exact same spot on the stack as 
the argument to the `save_debugger` command. Do, the test passed even when it 
shouldn't have. I have now removed the leftover command.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115925/new/

https://reviews.llvm.org/D115925

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] 7406d23 - [lldb/python] Fix (some) dangling pointers in our glue code

2021-12-20 Thread Pavel Labath via lldb-commits

Author: Pavel Labath
Date: 2021-12-20T09:42:08+01:00
New Revision: 7406d236d873d74b01c3cef285e5d9012dcef151

URL: 
https://github.com/llvm/llvm-project/commit/7406d236d873d74b01c3cef285e5d9012dcef151
DIFF: 
https://github.com/llvm/llvm-project/commit/7406d236d873d74b01c3cef285e5d9012dcef151.diff

LOG: [lldb/python] Fix (some) dangling pointers in our glue code

This starts to fix the other half of the lifetime problems in this code
-- dangling references. SB objects created on the stack will go away
when the function returns, which is a problem if the python code they
were meant for stashes a reference to them somewhere.  Most of the time
this goes by unnoticed, as the code rarely has a reason to store these,
but in case it does, we shouldn't respond by crashing.

This patch fixes the management for a couple of SB objects (Debugger,
Frame, Thread). The SB objects are now created on the heap, and
their ownership is immediately passed on to SWIG, which will ensure they
are destroyed when the last python reference goes away. I will handle
the other objects in separate patches.

I include one test which demonstrates the lifetime issue for SBDebugger.
Strictly speaking, one should create a test case for each of these
objects and each of the contexts they are being used. That would require
figuring out how to persist (and later access) each of these objects.
Some of those may involve a lot of hoop-jumping (we can run python code
from within a frame-format string). I don't think that is
necessary/worth it since the new wrapper functions make it very hard to
get this wrong.

Differential Revision: https://reviews.llvm.org/D115925

Added: 
lldb/test/API/commands/command/script/persistence.py

Modified: 
lldb/bindings/python/python-swigsafecast.swig
lldb/bindings/python/python-wrapper.swig
lldb/source/Plugins/ScriptInterpreter/Python/SWIGPythonBridge.h
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
lldb/test/API/commands/command/script/TestCommandScript.py
lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp

Removed: 




diff  --git a/lldb/bindings/python/python-swigsafecast.swig 
b/lldb/bindings/python/python-swigsafecast.swig
index 87abe0b3f1872..25c2f44106bc4 100644
--- a/lldb/bindings/python/python-swigsafecast.swig
+++ b/lldb/bindings/python/python-swigsafecast.swig
@@ -5,18 +5,6 @@ PyObject *SBTypeToSWIGWrapper(lldb::SBEvent &event_sb) {
   return SWIG_NewPointerObj(&event_sb, SWIGTYPE_p_lldb__SBEvent, 0);
 }
 
-PyObject *SBTypeToSWIGWrapper(lldb::SBThread &thread_sb) {
-  return SWIG_NewPointerObj(&thread_sb, SWIGTYPE_p_lldb__SBThread, 0);
-}
-
-PyObject *SBTypeToSWIGWrapper(lldb::SBFrame &frame_sb) {
-  return SWIG_NewPointerObj(&frame_sb, SWIGTYPE_p_lldb__SBFrame, 0);
-}
-
-PyObject *SBTypeToSWIGWrapper(lldb::SBDebugger &debugger_sb) {
-  return SWIG_NewPointerObj(&debugger_sb, SWIGTYPE_p_lldb__SBDebugger, 0);
-}
-
 PyObject *SBTypeToSWIGWrapper(lldb::SBWatchpoint &watchpoint_sb) {
   return SWIG_NewPointerObj(&watchpoint_sb, SWIGTYPE_p_lldb__SBWatchpoint, 0);
 }
@@ -89,5 +77,20 @@ PythonObject ToSWIGWrapper(const StructuredDataImpl 
&data_impl) {
   return ToSWIGWrapper(std::make_unique(data_impl));
 }
 
+PythonObject ToSWIGWrapper(lldb::ThreadSP thread_sp) {
+  return ToSWIGHelper(new lldb::SBThread(std::move(thread_sp)),
+  SWIGTYPE_p_lldb__SBThread);
+}
+
+PythonObject ToSWIGWrapper(lldb::StackFrameSP frame_sp) {
+  return ToSWIGHelper(new lldb::SBFrame(std::move(frame_sp)),
+  SWIGTYPE_p_lldb__SBFrame);
+}
+
+PythonObject ToSWIGWrapper(lldb::DebuggerSP debugger_sp) {
+  return ToSWIGHelper(new lldb::SBDebugger(std::move(debugger_sp)),
+  SWIGTYPE_p_lldb__SBDebugger);
+}
+
 } // namespace python
 } // namespace lldb_private

diff  --git a/lldb/bindings/python/python-wrapper.swig 
b/lldb/bindings/python/python-wrapper.swig
index 0e857197a5c54..b03d7c02eaa15 100644
--- a/lldb/bindings/python/python-wrapper.swig
+++ b/lldb/bindings/python/python-wrapper.swig
@@ -23,7 +23,6 @@ llvm::Expected 
lldb_private::LLDBSwigPythonBreakpointCallbackFunction(
 const lldb_private::StructuredDataImpl &args_impl) {
   using namespace llvm;
 
-  lldb::SBFrame sb_frame(frame_sp);
   lldb::SBBreakpointLocation sb_bp_loc(bp_loc_sp);
 
   PyErr_Cleaner py_err_cleaner(true);
@@ -38,7 +37,7 @@ llvm::Expected 
lldb_private::LLDBSwigPythonBreakpointCallbackFunction(
   else
 return arg_info.takeError();
 
-  PythonObject frame_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_frame));
+  PythonObject frame_arg = ToSWIGWrapper(frame_sp);
   PythonObject bp_loc_arg(PyRefType::Owned, SBTypeToSWIGWrapper(sb_bp_loc));
 
   auto result = [&]() -> Expected {
@@ -71,7 +70,6 @@ llvm::Expected 
lldb_private::LLDBSwigPythonBreakpointCallbackFunction(
 bool lldb_private::LLDBSwigPythonWatchpointCallbackFunction(
 const char *python

[Lldb-commits] [PATCH] D115925: [lldb/python] Fix (some) dangling pointers in our glue code

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7406d236d873: [lldb/python] Fix (some) dangling pointers in 
our glue code (authored by labath).

Changed prior to commit:
  https://reviews.llvm.org/D115925?vs=395072&id=395389#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115925/new/

https://reviews.llvm.org/D115925

Files:
  lldb/bindings/python/python-swigsafecast.swig
  lldb/bindings/python/python-wrapper.swig
  lldb/source/Plugins/ScriptInterpreter/Python/SWIGPythonBridge.h
  lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
  lldb/test/API/commands/command/script/TestCommandScript.py
  lldb/test/API/commands/command/script/persistence.py
  lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp

Index: lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp
===
--- lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp
+++ lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp
@@ -88,7 +88,7 @@
 
 void *lldb_private::LLDBSwigPythonCreateCommandObject(
 const char *python_class_name, const char *session_dictionary_name,
-const lldb::DebuggerSP debugger_sp) {
+lldb::DebuggerSP debugger_sp) {
   return nullptr;
 }
 
@@ -172,14 +172,14 @@
 
 bool lldb_private::LLDBSwigPythonCallCommand(
 const char *python_function_name, const char *session_dictionary_name,
-lldb::DebuggerSP &debugger, const char *args,
+lldb::DebuggerSP debugger, const char *args,
 lldb_private::CommandReturnObject &cmd_retobj,
 lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
   return false;
 }
 
 bool lldb_private::LLDBSwigPythonCallCommandObject(
-PyObject *implementor, lldb::DebuggerSP &debugger, const char *args,
+PyObject *implementor, lldb::DebuggerSP debugger, const char *args,
 lldb_private::CommandReturnObject &cmd_retobj,
 lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
   return false;
@@ -187,7 +187,7 @@
 
 bool lldb_private::LLDBSwigPythonCallModuleInit(
 const char *python_module_name, const char *session_dictionary_name,
-lldb::DebuggerSP &debugger) {
+lldb::DebuggerSP debugger) {
   return false;
 }
 
@@ -228,10 +228,10 @@
   return false;
 }
 
-bool lldb_private::LLDBSWIGPythonRunScriptKeywordThread(
+llvm::Optional lldb_private::LLDBSWIGPythonRunScriptKeywordThread(
 const char *python_function_name, const char *session_dictionary_name,
-lldb::ThreadSP &thread, std::string &output) {
-  return false;
+lldb::ThreadSP thread) {
+  return llvm::None;
 }
 
 bool lldb_private::LLDBSWIGPythonRunScriptKeywordTarget(
@@ -240,10 +240,10 @@
   return false;
 }
 
-bool lldb_private::LLDBSWIGPythonRunScriptKeywordFrame(
+llvm::Optional lldb_private::LLDBSWIGPythonRunScriptKeywordFrame(
 const char *python_function_name, const char *session_dictionary_name,
-lldb::StackFrameSP &frame, std::string &output) {
-  return false;
+lldb::StackFrameSP frame) {
+  return llvm::None;
 }
 
 bool lldb_private::LLDBSWIGPythonRunScriptKeywordValue(
Index: lldb/test/API/commands/command/script/persistence.py
===
--- /dev/null
+++ lldb/test/API/commands/command/script/persistence.py
@@ -0,0 +1,9 @@
+import lldb
+
+debugger_copy = None
+
+def save_debugger(debugger, command, context, result, internal_dict):
+global debugger_copy
+debugger_copy = debugger
+result.AppendMessage(str(debugger))
+result.SetStatus(lldb.eReturnStatusSuccessFinishResult)
Index: lldb/test/API/commands/command/script/TestCommandScript.py
===
--- lldb/test/API/commands/command/script/TestCommandScript.py
+++ lldb/test/API/commands/command/script/TestCommandScript.py
@@ -165,3 +165,9 @@
 self.runCmd('command script add -f bug11569 bug11569')
 # This should not crash.
 self.runCmd('bug11569', check=False)
+
+def test_persistence(self):
+self.runCmd("command script import persistence.py")
+self.runCmd("command script add -f persistence.save_debugger save_debugger")
+self.expect("save_debugger", substrs=[str(self.dbg)])
+self.expect("script str(persistence.debugger_copy)", substrs=[str(self.dbg)])
Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
===
--- lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -2521,7 +2521,6 @@
 bool ScriptInterpreterPythonImpl::RunScriptFormatKeyword(
 const char *impl_function, Thread *thread, std::string &output,
 Status &error) {
-  bool ret_val;
   if (!thread) {
 error.SetErrorString("no thread");
 return false;
@@ -2531,16 +2530,16 @@
 return false;
   }
 

[Lldb-commits] [lldb] 6c2bf01 - [lldb/python] Fix a compile error in 7406d236d8

2021-12-20 Thread Pavel Labath via lldb-commits

Author: Pavel Labath
Date: 2021-12-20T09:57:29+01:00
New Revision: 6c2bf01270a8a52b7986d5c49eaa7ad1c7083ec5

URL: 
https://github.com/llvm/llvm-project/commit/6c2bf01270a8a52b7986d5c49eaa7ad1c7083ec5
DIFF: 
https://github.com/llvm/llvm-project/commit/6c2bf01270a8a52b7986d5c49eaa7ad1c7083ec5.diff

LOG: [lldb/python] Fix a compile error in 7406d236d8

cannot pass object of non-trivial type
'lldb_private::python::PythonObject' through variadic function

Added: 


Modified: 
lldb/bindings/python/python-wrapper.swig

Removed: 




diff  --git a/lldb/bindings/python/python-wrapper.swig 
b/lldb/bindings/python/python-wrapper.swig
index b03d7c02eaa15..5f85af2ba6ce2 100644
--- a/lldb/bindings/python/python-wrapper.swig
+++ b/lldb/bindings/python/python-wrapper.swig
@@ -920,7 +920,7 @@ PyObject 
*lldb_private::LLDBSwigPython_GetRecognizedArguments(
 
   PythonString str(callee_name);
   PyObject *result =
-  PyObject_CallMethodObjArgs(implementor, str.get(), arg, NULL);
+  PyObject_CallMethodObjArgs(implementor, str.get(), arg.get(), NULL);
   return result;
 }
 



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] f0a670e - [lldb/test] Remove some decorators from TestModuleCacheUniversal

2021-12-20 Thread Pavel Labath via lldb-commits

Author: Pavel Labath
Date: 2021-12-20T12:20:00+01:00
New Revision: f0a670e93b61928982e43afb2d57179ea18f0b8c

URL: 
https://github.com/llvm/llvm-project/commit/f0a670e93b61928982e43afb2d57179ea18f0b8c
DIFF: 
https://github.com/llvm/llvm-project/commit/f0a670e93b61928982e43afb2d57179ea18f0b8c.diff

LOG: [lldb/test] Remove some decorators from TestModuleCacheUniversal

Now that the test uses a yaml file for creating binaries, we can run in
anywhere.

Added: 


Modified: 

lldb/test/API/functionalities/module_cache/universal/TestModuleCacheUniversal.py

Removed: 




diff  --git 
a/lldb/test/API/functionalities/module_cache/universal/TestModuleCacheUniversal.py
 
b/lldb/test/API/functionalities/module_cache/universal/TestModuleCacheUniversal.py
index a39db4d1164b5..0762bd86c4ebf 100644
--- 
a/lldb/test/API/functionalities/module_cache/universal/TestModuleCacheUniversal.py
+++ 
b/lldb/test/API/functionalities/module_cache/universal/TestModuleCacheUniversal.py
@@ -30,8 +30,6 @@ def get_module_cache_files(self, basename):
 
 # Doesn't depend on any specific debug information.
 @no_debug_info_test
-@skipUnlessDarwin
-@skipIfDarwinEmbedded # this test file assumes we're targetting an x86 
system
 def test(self):
 """
 Test module cache functionality for a universal mach-o files.



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] 35870c4 - [lldb] Summary provider for char flexible array members

2021-12-20 Thread Pavel Labath via lldb-commits

Author: Pavel Labath
Date: 2021-12-20T12:30:34+01:00
New Revision: 35870c442210b885391926f6ae8546beba70906f

URL: 
https://github.com/llvm/llvm-project/commit/35870c442210b885391926f6ae8546beba70906f
DIFF: 
https://github.com/llvm/llvm-project/commit/35870c442210b885391926f6ae8546beba70906f.diff

LOG: [lldb] Summary provider for char flexible array members

Add a summary provider which can print char[] members at the ends of
structs.

Differential Revision: https://reviews.llvm.org/D113174

Added: 
lldb/test/API/lang/c/flexible-array-members/Makefile
lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
lldb/test/API/lang/c/flexible-array-members/main.c

Modified: 
lldb/source/DataFormatters/FormatManager.cpp

lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py

Removed: 




diff  --git a/lldb/source/DataFormatters/FormatManager.cpp 
b/lldb/source/DataFormatters/FormatManager.cpp
index 924b7b6948f3c..0ef5f0adc8327 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -729,12 +729,8 @@ void FormatManager::LoadSystemFormatters() {
   TypeCategoryImpl::SharedPointer sys_category_sp =
   GetCategory(m_system_category_name);
 
-  sys_category_sp->GetTypeSummariesContainer()->Add(ConstString("char *"),
-string_format);
-  sys_category_sp->GetTypeSummariesContainer()->Add(
-  ConstString("unsigned char *"), string_format);
-  sys_category_sp->GetTypeSummariesContainer()->Add(
-  ConstString("signed char *"), string_format);
+  sys_category_sp->GetRegexTypeSummariesContainer()->Add(
+  RegularExpression(R"(^((un)?signed )?char ?(\*|\[\])$)"), string_format);
 
   sys_category_sp->GetRegexTypeSummariesContainer()->Add(
   std::move(any_size_char_arr), string_array_format);

diff  --git 
a/lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
 
b/lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
index e1dc52e8394ff..a47d91434822e 100644
--- 
a/lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
+++ 
b/lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
@@ -25,8 +25,8 @@ def test_type_summary_list_with_arg(self):
 self.expect(
 'type summary list char',
 substrs=[
-'char *',
-'unsigned char'])
+'char ?(\*|\[\])',
+'char ?\[[0-9]+\]'])
 
 self.expect(
 'type summary list -w default',
@@ -40,5 +40,7 @@ def test_type_summary_list_with_arg(self):
 matching=False)
 self.expect(
 'type summary list -w system char',
-substrs=['unsigned char *'],
+substrs=[
+'char ?(\*|\[\])',
+'char ?\[[0-9]+\]'],
 matching=True)

diff  --git a/lldb/test/API/lang/c/flexible-array-members/Makefile 
b/lldb/test/API/lang/c/flexible-array-members/Makefile
new file mode 100644
index 0..10495940055b6
--- /dev/null
+++ b/lldb/test/API/lang/c/flexible-array-members/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules

diff  --git 
a/lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py 
b/lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
new file mode 100644
index 0..a95fa34b3766c
--- /dev/null
+++ b/lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
@@ -0,0 +1,29 @@
+"""
+Tests C99's flexible array members.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestCase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+@no_debug_info_test
+def test(self):
+self.build()
+lldbutil.run_to_source_breakpoint(self, "// break here",
+lldb.SBFileSpec("main.c"))
+
+self.expect_var_path("c->flexible", type="char[]", 
summary='"contents"')
+self.expect_var_path("sc->flexible", type="signed char[]", 
summary='"contents"')
+self.expect_var_path("uc->flexible", type="unsigned char[]", 
summary='"contents"')
+# TODO: Make this work
+self.expect("expr c->flexible", error=True,
+substrs=["incomplete", "char[]"])
+self.expect("expr sc->flexible", error=True,
+substrs=["incomplete", "signed char[]"])
+self.expect("expr uc->flexible", error=True,
+substrs=["incomplete", "unsigned char[]"])

diff  --git a/lldb/test/API/lang/c/flexible-array-members/main.c 
b/lldb/test/API/lang/c/flexible-array-members/main.c
new file mode 100644
index 0..7decb4ac

[Lldb-commits] [PATCH] D113174: [lldb] Summary provider for char flexible array members

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG35870c442210: [lldb] Summary provider for char flexible 
array members (authored by labath).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113174/new/

https://reviews.llvm.org/D113174

Files:
  lldb/source/DataFormatters/FormatManager.cpp
  
lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
  lldb/test/API/lang/c/flexible-array-members/Makefile
  lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
  lldb/test/API/lang/c/flexible-array-members/main.c

Index: lldb/test/API/lang/c/flexible-array-members/main.c
===
--- /dev/null
+++ lldb/test/API/lang/c/flexible-array-members/main.c
@@ -0,0 +1,37 @@
+#include 
+#include 
+
+struct WithFlexChar {
+  int member;
+  char flexible[];
+};
+
+struct WithFlexSChar {
+  int member;
+  signed char flexible[];
+};
+
+struct WithFlexUChar {
+  int member;
+  unsigned char flexible[];
+};
+
+#define CONTENTS "contents"
+
+int main() {
+  struct WithFlexChar *c =
+  (struct WithFlexChar *)malloc(sizeof(int) + sizeof(CONTENTS));
+  c->member = 1;
+  strcpy(c->flexible, CONTENTS);
+
+  struct WithFlexSChar *sc =
+  (struct WithFlexSChar *)malloc(sizeof(int) + sizeof(CONTENTS));
+  sc->member = 1;
+  strcpy((char *)sc->flexible, CONTENTS);
+
+  struct WithFlexUChar *uc =
+  (struct WithFlexUChar *)malloc(sizeof(int) + sizeof(CONTENTS));
+  uc->member = 1;
+  strcpy((char *)uc->flexible, CONTENTS);
+  return 0; // break here
+}
Index: lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
===
--- /dev/null
+++ lldb/test/API/lang/c/flexible-array-members/TestCFlexibleArrayMembers.py
@@ -0,0 +1,29 @@
+"""
+Tests C99's flexible array members.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestCase(TestBase):
+
+mydir = TestBase.compute_mydir(__file__)
+
+@no_debug_info_test
+def test(self):
+self.build()
+lldbutil.run_to_source_breakpoint(self, "// break here",
+lldb.SBFileSpec("main.c"))
+
+self.expect_var_path("c->flexible", type="char[]", summary='"contents"')
+self.expect_var_path("sc->flexible", type="signed char[]", summary='"contents"')
+self.expect_var_path("uc->flexible", type="unsigned char[]", summary='"contents"')
+# TODO: Make this work
+self.expect("expr c->flexible", error=True,
+substrs=["incomplete", "char[]"])
+self.expect("expr sc->flexible", error=True,
+substrs=["incomplete", "signed char[]"])
+self.expect("expr uc->flexible", error=True,
+substrs=["incomplete", "unsigned char[]"])
Index: lldb/test/API/lang/c/flexible-array-members/Makefile
===
--- /dev/null
+++ lldb/test/API/lang/c/flexible-array-members/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules
Index: lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
===
--- lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
+++ lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py
@@ -25,8 +25,8 @@
 self.expect(
 'type summary list char',
 substrs=[
-'char *',
-'unsigned char'])
+'char ?(\*|\[\])',
+'char ?\[[0-9]+\]'])
 
 self.expect(
 'type summary list -w default',
@@ -40,5 +40,7 @@
 matching=False)
 self.expect(
 'type summary list -w system char',
-substrs=['unsigned char *'],
+substrs=[
+'char ?(\*|\[\])',
+'char ?\[[0-9]+\]'],
 matching=True)
Index: lldb/source/DataFormatters/FormatManager.cpp
===
--- lldb/source/DataFormatters/FormatManager.cpp
+++ lldb/source/DataFormatters/FormatManager.cpp
@@ -729,12 +729,8 @@
   TypeCategoryImpl::SharedPointer sys_category_sp =
   GetCategory(m_system_category_name);
 
-  sys_category_sp->GetTypeSummariesContainer()->Add(ConstString("char *"),
-string_format);
-  sys_category_sp->GetTypeSummariesContainer()->Add(
-  ConstString("unsigned char *"), string_format);
-  sys_category_sp->GetTypeSummariesContainer()->Add(
-  ConstString("signed char *"), string_format);
+  sys_category_sp->GetRegexTypeSummariesContainer()->Add(
+  RegularExpression(R"(^((un)?signed )

[Lldb-commits] [PATCH] D116028: [lldb] Use GetSupportedArchitectures on darwin platforms

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
labath created this revision.
labath added a reviewer: JDevlieghere.
labath requested review of this revision.
Herald added a project: LLDB.

This finishes the GetSupportedArchitectureAtIndex migration. There are
opportunities to simplify this even further, but I am going to leave
that to the platform owners.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116028

Files:
  lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.h
  lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.h
  lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h
  lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.h
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
  lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h

Index: lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
===
--- lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
+++ lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.h
@@ -39,8 +39,7 @@
   // lldb_private::PluginInterface functions
   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
 
-  bool GetSupportedArchitectureAtIndex(uint32_t idx,
-   lldb_private::ArchSpec &arch) override;
+  std::vector GetSupportedArchitectures() override;
 
 protected:
   llvm::StringRef GetDeviceSupportDirectoryName() override;
Index: lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
===
--- lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
+++ lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
@@ -133,9 +133,10 @@
 PlatformRemoteiOS::PlatformRemoteiOS()
 : PlatformRemoteDarwinDevice() {}
 
-bool PlatformRemoteiOS::GetSupportedArchitectureAtIndex(uint32_t idx,
-ArchSpec &arch) {
-  return ARMGetSupportedArchitectureAtIndex(idx, arch);
+std::vector PlatformRemoteiOS::GetSupportedArchitectures() {
+  std::vector result;
+  ARMGetSupportedArchitectures(result);
+  return result;
 }
 
 llvm::StringRef PlatformRemoteiOS::GetDeviceSupportDirectoryName() {
Index: lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
===
--- lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
+++ lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.h
@@ -42,15 +42,11 @@
   const lldb_private::UUID *uuid_ptr,
   lldb_private::FileSpec &local_file) override;
 
-  bool GetSupportedArchitectureAtIndex(uint32_t idx,
-   lldb_private::ArchSpec &arch) override;
+  std::vector GetSupportedArchitectures() override;
 
 protected:
   llvm::StringRef GetDeviceSupportDirectoryName() override;
   llvm::StringRef GetPlatformName() override;
-
-private:
-  uint32_t m_num_arm_arches = 0;
 };
 
 #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEMACOSX_H
Index: lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
===
--- lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
+++ lldb/source/Plugins/Platform/MacOSX/PlatformRemoteMacOSX.cpp
@@ -124,35 +124,19 @@
   return PlatformSP();
 }
 
-bool PlatformRemoteMacOSX::GetSupportedArchitectureAtIndex(uint32_t idx,
-   ArchSpec &arch) {
+std::vector PlatformRemoteMacOSX::GetSupportedArchitectures() {
   // macOS for ARM64 support both native and translated x86_64 processes
-  if (!m_num_arm_arches || idx < m_num_arm_arches) {
-bool res = ARMGetSupportedArchitectureAtIndex(idx, arch);
-if (res)
-  return true;
-if (!m_num_arm_arches)
-  m_num_arm_arches = idx;
-  }
+  std::vector result;
+  ARMGetSupportedArchitectures(result);
 
-  // We can't use x86GetSupportedArchitectureAtIndex() because it uses
+  // We can't use x86GetSupportedArchitectures() because it uses
   // the system architecture for some of its return values and also
   // has a 32bits variant.
-  if (idx == m_num_arm_arches)

[Lldb-commits] [PATCH] D115951: Cache the manual DWARF index out to the LLDB cache directory when the LLDB index cache is enabled.

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
labath added inline comments.



Comment at: lldb/source/Plugins/SymbolFile/DWARF/DIERef.h:59
+return m_dwo_num_valid == rhs.m_dwo_num_valid &&
+   m_dwo_num == rhs.m_dwo_num && m_section == rhs.m_section &&
+   m_die_offset == rhs.m_die_offset;

if `m_dwo_num_valid` then we shouldn't be checking/comparing m_dwo_num. Right 
now, it is kinda ok, as I don't think there's a way to obtain a non-zero 
m_dwo_num with `m_dwo_num_valid = false`, but it'd be better to not rely on 
that. You can just compare `dwo_num()` with `rhs.dwo_num()`.



Comment at: lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp:31
-  SymbolFileDWARF &main_dwarf = *m_dwarf;
-  m_dwarf = nullptr;
-

The m_dwarf pointer also served as a flag indicating whether indexing has been 
done. If you want to keep it around, you'll need to introduce another field to 
track the indexing state.



Comment at: lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp:32-34
+  llvm::Optional decoded_object = DIERef::Decode(data, &data_offset);
+  ASSERT_EQ((bool)decoded_object, true);
+  EXPECT_EQ(object, decoded_object.getValue());

EXPECT_EQ(object, DIERef::Decode(data, &data_offset))


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115951/new/

https://reviews.llvm.org/D115951

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D116005: [lldb] [Process/FreeBSDKernel] Introduce libkvm support

2021-12-20 Thread Pavel Labath via Phabricator via lldb-commits
labath added a comment.

How about factoring the two implementations into subclasses. If the classes are 
small, maybe you can just declare them in the cpp file...


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116005/new/

https://reviews.llvm.org/D116005

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D115951: Cache the manual DWARF index out to the LLDB cache directory when the LLDB index cache is enabled.

2021-12-20 Thread Greg Clayton via Phabricator via lldb-commits
clayborg updated this revision to Diff 395440.
clayborg added a comment.

Address review comments.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115951/new/

https://reviews.llvm.org/D115951

Files:
  lldb/include/lldb/Symbol/SymbolFile.h
  lldb/include/lldb/Symbol/Symtab.h
  lldb/include/lldb/Target/Statistics.h
  lldb/source/Plugins/SymbolFile/DWARF/DIERef.cpp
  lldb/source/Plugins/SymbolFile/DWARF/DIERef.h
  lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
  lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h
  lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
  lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h
  lldb/source/Symbol/Symtab.cpp
  lldb/source/Target/Statistics.cpp
  lldb/test/API/commands/statistics/basic/TestStats.py
  lldb/test/API/functionalities/module_cache/debug_index/TestDebugIndexCache.py
  lldb/test/API/functionalities/module_cache/debug_index/exe.yaml
  lldb/test/API/functionalities/module_cache/simple_exe/TestModuleCacheSimple.py
  lldb/unittests/SymbolFile/DWARF/CMakeLists.txt
  lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp

Index: lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp
===
--- /dev/null
+++ lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp
@@ -0,0 +1,200 @@
+//===-- DWARFIndexCachingTest.cpp -=---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "Plugins/SymbolFile/DWARF/DIERef.h"
+#include "Plugins/SymbolFile/DWARF/DWARFDIE.h"
+#include "Plugins/SymbolFile/DWARF/ManualDWARFIndex.h"
+#include "Plugins/SymbolFile/DWARF/NameToDIE.h"
+#include "TestingSupport/Symbol/YAMLModuleTester.h"
+#include "lldb/Core/DataFileCache.h"
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Utility/DataEncoder.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "llvm/ADT/STLExtras.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+static void EncodeDecode(const DIERef &object, ByteOrder byte_order) {
+  const uint8_t addr_size = 8;
+  DataEncoder encoder(byte_order, addr_size);
+  object.Encode(encoder);
+  llvm::ArrayRef bytes = encoder.GetData();
+  DataExtractor data(bytes.data(), bytes.size(), byte_order, addr_size);
+  offset_t data_offset = 0;
+  // llvm::Optional decoded_object = ;
+  // ASSERT_EQ((bool)decoded_object, true);
+  EXPECT_EQ(object, DIERef::Decode(data, &data_offset));
+}
+
+static void EncodeDecode(const DIERef &object) {
+  EncodeDecode(object, eByteOrderLittle);
+  EncodeDecode(object, eByteOrderBig);
+}
+
+TEST(DWARFIndexCachingTest, DIERefEncodeDecode) {
+  // Tests DIERef::Encode(...) and DIERef::Decode(...)
+  EncodeDecode(DIERef(llvm::None, DIERef::Section::DebugInfo, 0x11223344));
+  EncodeDecode(DIERef(llvm::None, DIERef::Section::DebugTypes, 0x11223344));
+  EncodeDecode(DIERef(100, DIERef::Section::DebugInfo, 0x11223344));
+  EncodeDecode(DIERef(200, DIERef::Section::DebugTypes, 0x11223344));
+}
+
+static void EncodeDecode(const NameToDIE &object, ByteOrder byte_order) {
+  const uint8_t addr_size = 8;
+  DataEncoder encoder(byte_order, addr_size);
+  DataEncoder strtab_encoder(byte_order, addr_size);
+  ConstStringTable const_strtab;
+
+  object.Encode(encoder, const_strtab);
+
+  llvm::ArrayRef bytes = encoder.GetData();
+  DataExtractor data(bytes.data(), bytes.size(), byte_order, addr_size);
+
+  const_strtab.Encode(strtab_encoder);
+  llvm::ArrayRef strtab_bytes = strtab_encoder.GetData();
+  DataExtractor strtab_data(strtab_bytes.data(), strtab_bytes.size(),
+byte_order, addr_size);
+  StringTableReader strtab_reader;
+  offset_t strtab_data_offset = 0;
+  ASSERT_EQ(strtab_reader.Decode(strtab_data, &strtab_data_offset), true);
+
+  NameToDIE decoded_object;
+  offset_t data_offset = 0;
+  decoded_object.Decode(data, &data_offset, strtab_reader);
+  EXPECT_TRUE(object == decoded_object);
+}
+
+static void EncodeDecode(const NameToDIE &object) {
+  EncodeDecode(object, eByteOrderLittle);
+  EncodeDecode(object, eByteOrderBig);
+}
+
+TEST(DWARFIndexCachingTest, NameToDIEEncodeDecode) {
+  NameToDIE map;
+  // Make sure an empty NameToDIE map encodes and decodes correctly.
+  EncodeDecode(map);
+  map.Insert(ConstString("hello"),
+ DIERef(llvm::None, DIERef::Section::DebugInfo, 0x11223344));
+  map.Insert(ConstString("workd"),
+ DIERef(100, DIERef::Section::DebugInfo, 0x11223344));
+  // Make sure a valid NameToDIE map encodes and decodes correctly.
+  EncodeDecode(map);
+}
+
+static void EncodeDecode(const ManualDWARFIndex::IndexSet &object,
+ ByteOrder byte_order) {
+

[Lldb-commits] [PATCH] D115951: Cache the manual DWARF index out to the LLDB cache directory when the LLDB index cache is enabled.

2021-12-20 Thread Greg Clayton via Phabricator via lldb-commits
clayborg updated this revision to Diff 395441.
clayborg added a comment.

Remove commented out code.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115951/new/

https://reviews.llvm.org/D115951

Files:
  lldb/include/lldb/Symbol/SymbolFile.h
  lldb/include/lldb/Symbol/Symtab.h
  lldb/include/lldb/Target/Statistics.h
  lldb/source/Plugins/SymbolFile/DWARF/DIERef.cpp
  lldb/source/Plugins/SymbolFile/DWARF/DIERef.h
  lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.cpp
  lldb/source/Plugins/SymbolFile/DWARF/ManualDWARFIndex.h
  lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
  lldb/source/Plugins/SymbolFile/DWARF/NameToDIE.h
  lldb/source/Symbol/Symtab.cpp
  lldb/source/Target/Statistics.cpp
  lldb/test/API/commands/statistics/basic/TestStats.py
  lldb/test/API/functionalities/module_cache/debug_index/TestDebugIndexCache.py
  lldb/test/API/functionalities/module_cache/debug_index/exe.yaml
  lldb/test/API/functionalities/module_cache/simple_exe/TestModuleCacheSimple.py
  lldb/unittests/SymbolFile/DWARF/CMakeLists.txt
  lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp

Index: lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp
===
--- /dev/null
+++ lldb/unittests/SymbolFile/DWARF/DWARFIndexCachingTest.cpp
@@ -0,0 +1,198 @@
+//===-- DWARFIndexCachingTest.cpp -=---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "Plugins/SymbolFile/DWARF/DIERef.h"
+#include "Plugins/SymbolFile/DWARF/DWARFDIE.h"
+#include "Plugins/SymbolFile/DWARF/ManualDWARFIndex.h"
+#include "Plugins/SymbolFile/DWARF/NameToDIE.h"
+#include "TestingSupport/Symbol/YAMLModuleTester.h"
+#include "lldb/Core/DataFileCache.h"
+#include "lldb/Core/ModuleList.h"
+#include "lldb/Utility/DataEncoder.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "llvm/ADT/STLExtras.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+static void EncodeDecode(const DIERef &object, ByteOrder byte_order) {
+  const uint8_t addr_size = 8;
+  DataEncoder encoder(byte_order, addr_size);
+  object.Encode(encoder);
+  llvm::ArrayRef bytes = encoder.GetData();
+  DataExtractor data(bytes.data(), bytes.size(), byte_order, addr_size);
+  offset_t data_offset = 0;
+  EXPECT_EQ(object, DIERef::Decode(data, &data_offset));
+}
+
+static void EncodeDecode(const DIERef &object) {
+  EncodeDecode(object, eByteOrderLittle);
+  EncodeDecode(object, eByteOrderBig);
+}
+
+TEST(DWARFIndexCachingTest, DIERefEncodeDecode) {
+  // Tests DIERef::Encode(...) and DIERef::Decode(...)
+  EncodeDecode(DIERef(llvm::None, DIERef::Section::DebugInfo, 0x11223344));
+  EncodeDecode(DIERef(llvm::None, DIERef::Section::DebugTypes, 0x11223344));
+  EncodeDecode(DIERef(100, DIERef::Section::DebugInfo, 0x11223344));
+  EncodeDecode(DIERef(200, DIERef::Section::DebugTypes, 0x11223344));
+}
+
+static void EncodeDecode(const NameToDIE &object, ByteOrder byte_order) {
+  const uint8_t addr_size = 8;
+  DataEncoder encoder(byte_order, addr_size);
+  DataEncoder strtab_encoder(byte_order, addr_size);
+  ConstStringTable const_strtab;
+
+  object.Encode(encoder, const_strtab);
+
+  llvm::ArrayRef bytes = encoder.GetData();
+  DataExtractor data(bytes.data(), bytes.size(), byte_order, addr_size);
+
+  const_strtab.Encode(strtab_encoder);
+  llvm::ArrayRef strtab_bytes = strtab_encoder.GetData();
+  DataExtractor strtab_data(strtab_bytes.data(), strtab_bytes.size(),
+byte_order, addr_size);
+  StringTableReader strtab_reader;
+  offset_t strtab_data_offset = 0;
+  ASSERT_EQ(strtab_reader.Decode(strtab_data, &strtab_data_offset), true);
+
+  NameToDIE decoded_object;
+  offset_t data_offset = 0;
+  decoded_object.Decode(data, &data_offset, strtab_reader);
+  EXPECT_TRUE(object == decoded_object);
+}
+
+static void EncodeDecode(const NameToDIE &object) {
+  EncodeDecode(object, eByteOrderLittle);
+  EncodeDecode(object, eByteOrderBig);
+}
+
+TEST(DWARFIndexCachingTest, NameToDIEEncodeDecode) {
+  NameToDIE map;
+  // Make sure an empty NameToDIE map encodes and decodes correctly.
+  EncodeDecode(map);
+  map.Insert(ConstString("hello"),
+ DIERef(llvm::None, DIERef::Section::DebugInfo, 0x11223344));
+  map.Insert(ConstString("workd"),
+ DIERef(100, DIERef::Section::DebugInfo, 0x11223344));
+  // Make sure a valid NameToDIE map encodes and decodes correctly.
+  EncodeDecode(map);
+}
+
+static void EncodeDecode(const ManualDWARFIndex::IndexSet &object,
+ ByteOrder byte_order) {
+  const uint8_t addr_size = 8;
+  DataEncoder encoder(byte_order, addr_size);
+  Da

[Lldb-commits] [lldb] cc56c66 - Revert "[AST] Add UsingType: a sugar type for types found via UsingDecl"

2021-12-20 Thread Sam McCall via lldb-commits

Author: Sam McCall
Date: 2021-12-20T17:53:56+01:00
New Revision: cc56c66f27e131b914082d3bd21180646e842e9a

URL: 
https://github.com/llvm/llvm-project/commit/cc56c66f27e131b914082d3bd21180646e842e9a
DIFF: 
https://github.com/llvm/llvm-project/commit/cc56c66f27e131b914082d3bd21180646e842e9a.diff

LOG: Revert "[AST] Add UsingType: a sugar type for types found via UsingDecl"

This reverts commit e1600db19d6303f84b995acb9340459694e06ea9.

Breaks sanitizer tests, at least on windows:
https://lab.llvm.org/buildbot/#/builders/127/builds/21592/steps/4/logs/stdio

Added: 


Modified: 
clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
clang-tools-extra/clangd/FindTarget.cpp
clang-tools-extra/clangd/IncludeCleaner.cpp
clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
clang/docs/ReleaseNotes.rst
clang/include/clang/AST/ASTContext.h
clang/include/clang/AST/PropertiesBase.td
clang/include/clang/AST/RecursiveASTVisitor.h
clang/include/clang/AST/TextNodeDumper.h
clang/include/clang/AST/Type.h
clang/include/clang/AST/TypeLoc.h
clang/include/clang/AST/TypeProperties.td
clang/include/clang/ASTMatchers/ASTMatchers.h
clang/include/clang/ASTMatchers/ASTMatchersInternal.h
clang/include/clang/Basic/TypeNodes.td
clang/include/clang/Serialization/TypeBitCodes.def
clang/lib/AST/ASTContext.cpp
clang/lib/AST/ASTDiagnostic.cpp
clang/lib/AST/ASTImporter.cpp
clang/lib/AST/ASTStructuralEquivalence.cpp
clang/lib/AST/ItaniumMangle.cpp
clang/lib/AST/QualTypeNames.cpp
clang/lib/AST/TextNodeDumper.cpp
clang/lib/AST/Type.cpp
clang/lib/AST/TypePrinter.cpp
clang/lib/ASTMatchers/ASTMatchersInternal.cpp
clang/lib/ASTMatchers/Dynamic/Registry.cpp
clang/lib/CodeGen/CGDebugInfo.cpp
clang/lib/CodeGen/CodeGenFunction.cpp
clang/lib/Sema/SemaCXXScopeSpec.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/TreeTransform.h
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/tools/libclang/CIndex.cpp
clang/unittests/AST/ASTImporterTest.cpp
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp

Removed: 
clang/test/AST/ast-dump-using.cpp



diff  --git 
a/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp 
b/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
index 4c6d898d4cf7..d943b7a1a270 100644
--- a/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
@@ -196,12 +196,6 @@ void 
UpgradeGoogletestCaseCheck::registerMatchers(MatchFinder *Finder) {
   usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(TestCaseTypeAlias)))
   .bind("using"),
   this);
-  Finder->addMatcher(
-  typeLoc(loc(usingType(hasUnderlyingType(
-  typedefType(hasDeclaration(TestCaseTypeAlias),
-  unless(hasAncestor(decl(isImplicit(, LocationFilter)
-  .bind("typeloc"),
-  this);
 }
 
 static llvm::StringRef getNewMethodName(llvm::StringRef CurrentName) {

diff  --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp 
b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
index 9265504a7651..04dff8dfefe0 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -45,7 +45,6 @@ AST_MATCHER_P(DeducedTemplateSpecializationType, 
refsToTemplatedDecl,
 return DeclMatcher.matches(*TD, Finder, Builder);
   return false;
 }
-
 } // namespace
 
 // A function that helps to tell whether a TargetDecl in a UsingDecl will be
@@ -61,10 +60,13 @@ static bool shouldCheckDecl(const Decl *TargetDecl) {
 void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) {
   Finder->addMatcher(usingDecl(isExpansionInMainFile()).bind("using"), this);
   auto DeclMatcher = hasDeclaration(namedDecl().bind("used"));
+  Finder->addMatcher(loc(enumType(DeclMatcher)), this);
+  Finder->addMatcher(loc(recordType(DeclMatcher)), this);
   Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this);
   Finder->addMatcher(loc(deducedTemplateSpecializationType(
  refsToTemplatedDecl(namedDecl().bind("used",
  this);
+  Finder->addMatcher(declRefExpr().bind("used"), this);
   Finder->addMatcher(callExpr(callee(unresolvedLookupExpr().bind("used"))),
  this);
   Finder->addMatcher(
@@ -74,12 +76,6 @@ void UnusedUsingDeclsCheck::registerMatchers(MatchFinder 
*Finder) {
   Finder->addMatcher(loc(templateSpecializationType(forEachTemplateArgument(
   

[Lldb-commits] [lldb] af27466 - Reland "[AST] Add UsingType: a sugar type for types found via UsingDecl"

2021-12-20 Thread Sam McCall via lldb-commits

Author: Sam McCall
Date: 2021-12-20T18:03:15+01:00
New Revision: af27466c50398e3f04372850370eab8dc8abbb92

URL: 
https://github.com/llvm/llvm-project/commit/af27466c50398e3f04372850370eab8dc8abbb92
DIFF: 
https://github.com/llvm/llvm-project/commit/af27466c50398e3f04372850370eab8dc8abbb92.diff

LOG: Reland "[AST] Add UsingType: a sugar type for types found via UsingDecl"

This reverts commit cc56c66f27e131b914082d3bd21180646e842e9a.
Fixed a bad assertion, the target of a UsingShadowDecl must not have
*local* qualifiers, but it can be a typedef whose underlying type is qualified.

Added: 
clang/test/AST/ast-dump-using.cpp

Modified: 
clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
clang-tools-extra/clangd/FindTarget.cpp
clang-tools-extra/clangd/IncludeCleaner.cpp
clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
clang/docs/ReleaseNotes.rst
clang/include/clang/AST/ASTContext.h
clang/include/clang/AST/PropertiesBase.td
clang/include/clang/AST/RecursiveASTVisitor.h
clang/include/clang/AST/TextNodeDumper.h
clang/include/clang/AST/Type.h
clang/include/clang/AST/TypeLoc.h
clang/include/clang/AST/TypeProperties.td
clang/include/clang/ASTMatchers/ASTMatchers.h
clang/include/clang/ASTMatchers/ASTMatchersInternal.h
clang/include/clang/Basic/TypeNodes.td
clang/include/clang/Serialization/TypeBitCodes.def
clang/lib/AST/ASTContext.cpp
clang/lib/AST/ASTDiagnostic.cpp
clang/lib/AST/ASTImporter.cpp
clang/lib/AST/ASTStructuralEquivalence.cpp
clang/lib/AST/ItaniumMangle.cpp
clang/lib/AST/QualTypeNames.cpp
clang/lib/AST/TextNodeDumper.cpp
clang/lib/AST/Type.cpp
clang/lib/AST/TypePrinter.cpp
clang/lib/ASTMatchers/ASTMatchersInternal.cpp
clang/lib/ASTMatchers/Dynamic/Registry.cpp
clang/lib/CodeGen/CGDebugInfo.cpp
clang/lib/CodeGen/CodeGenFunction.cpp
clang/lib/Sema/SemaCXXScopeSpec.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/TreeTransform.h
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/tools/libclang/CIndex.cpp
clang/unittests/AST/ASTImporterTest.cpp
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp

Removed: 




diff  --git 
a/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp 
b/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
index d943b7a1a270..4c6d898d4cf7 100644
--- a/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/google/UpgradeGoogletestCaseCheck.cpp
@@ -196,6 +196,12 @@ void 
UpgradeGoogletestCaseCheck::registerMatchers(MatchFinder *Finder) {
   usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(TestCaseTypeAlias)))
   .bind("using"),
   this);
+  Finder->addMatcher(
+  typeLoc(loc(usingType(hasUnderlyingType(
+  typedefType(hasDeclaration(TestCaseTypeAlias),
+  unless(hasAncestor(decl(isImplicit(, LocationFilter)
+  .bind("typeloc"),
+  this);
 }
 
 static llvm::StringRef getNewMethodName(llvm::StringRef CurrentName) {

diff  --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp 
b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
index 04dff8dfefe0..9265504a7651 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp
@@ -45,6 +45,7 @@ AST_MATCHER_P(DeducedTemplateSpecializationType, 
refsToTemplatedDecl,
 return DeclMatcher.matches(*TD, Finder, Builder);
   return false;
 }
+
 } // namespace
 
 // A function that helps to tell whether a TargetDecl in a UsingDecl will be
@@ -60,13 +61,10 @@ static bool shouldCheckDecl(const Decl *TargetDecl) {
 void UnusedUsingDeclsCheck::registerMatchers(MatchFinder *Finder) {
   Finder->addMatcher(usingDecl(isExpansionInMainFile()).bind("using"), this);
   auto DeclMatcher = hasDeclaration(namedDecl().bind("used"));
-  Finder->addMatcher(loc(enumType(DeclMatcher)), this);
-  Finder->addMatcher(loc(recordType(DeclMatcher)), this);
   Finder->addMatcher(loc(templateSpecializationType(DeclMatcher)), this);
   Finder->addMatcher(loc(deducedTemplateSpecializationType(
  refsToTemplatedDecl(namedDecl().bind("used",
  this);
-  Finder->addMatcher(declRefExpr().bind("used"), this);
   Finder->addMatcher(callExpr(callee(unresolvedLookupExpr().bind("used"))),
  this);
   Finder->addMatcher(
@@ -76,6 +74,12 @@ void UnusedUsingDeclsCheck::registerMatchers(MatchFinder 
*Finder) {
   Finder->addMatcher(loc(templateSpecializationType(forEachTemplat

[Lldb-commits] [PATCH] D116005: [lldb] [Process/FreeBSDKernel] Introduce libkvm support

2021-12-20 Thread Michał Górny via Phabricator via lldb-commits
mgorny updated this revision to Diff 395471.
mgorny added a comment.

Split into FVC/KVM classes.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116005/new/

https://reviews.llvm.org/D116005

Files:
  lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt
  lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
  lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h
  
lldb/test/API/functionalities/postmortem/FreeBSDKernel/TestFreeBSDKernelLive.py

Index: lldb/test/API/functionalities/postmortem/FreeBSDKernel/TestFreeBSDKernelLive.py
===
--- /dev/null
+++ lldb/test/API/functionalities/postmortem/FreeBSDKernel/TestFreeBSDKernelLive.py
@@ -0,0 +1,44 @@
+import os
+import struct
+import subprocess
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class FreeBSDKernelVMCoreTestCase(TestBase):
+NO_DEBUG_INFO_TESTCASE = True
+
+mydir = TestBase.compute_mydir(__file__)
+
+def test_mem(self):
+kernel_exec = "/boot/kernel/kernel"
+mem_device = "/dev/mem"
+
+if not os.access(kernel_exec, os.R_OK):
+self.skipTest("Kernel @ %s is not readable" % (kernel_exec,))
+if not os.access(mem_device, os.R_OK):
+self.skipTest("Memory @ %s is not readable" % (mem_device,))
+
+target = self.dbg.CreateTarget(kernel_exec)
+process = target.LoadCore(mem_device)
+hz_value = int(subprocess.check_output(["sysctl", "-n", "kern.hz"]))
+
+self.assertTrue(process, PROCESS_IS_VALID)
+self.assertEqual(process.GetNumThreads(), 1)
+self.assertEqual(process.GetProcessID(), 0)
+
+# test memory reading
+self.expect("expr -- *(int *) &hz",
+substrs=["(int) $0 = %d" % hz_value])
+
+main_mod = target.GetModuleAtIndex(0)
+hz_addr = (main_mod.FindSymbols("hz")[0].symbol.addr
+   .GetLoadAddress(target))
+error = lldb.SBError()
+self.assertEqual(process.ReadMemory(hz_addr, 4, error),
+ struct.pack("
+#endif
+#if defined(__FreeBSD__)
+#include 
+#endif
 
 using namespace lldb;
 using namespace lldb_private;
 
 LLDB_PLUGIN_DEFINE(ProcessFreeBSDKernel)
 
-ProcessFreeBSDKernel::ProcessFreeBSDKernel(lldb::TargetSP target_sp,
-   ListenerSP listener_sp,
-   const FileSpec &core_file, void *fvc)
-: PostMortemProcess(target_sp, listener_sp), m_fvc(fvc) {}
+#if LLDB_ENABLE_FBSDVMCORE
+class ProcessFreeBSDKernelFVC : public ProcessFreeBSDKernel {
+public:
+  ProcessFreeBSDKernelFVC(lldb::TargetSP target_sp, lldb::ListenerSP listener,
+  fvc_t *fvc);
 
-ProcessFreeBSDKernel::~ProcessFreeBSDKernel() {
-  if (m_fvc)
-fvc_close(static_cast(m_fvc));
-}
+  ~ProcessFreeBSDKernelFVC();
+
+  size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
+  lldb_private::Status &error) override;
+
+  const char *GetError();
+
+private:
+  fvc_t *m_fvc;
+};
+#endif // LLDB_ENABLE_FBSDVMCORE
+
+#if defined(__FreeBSD__)
+class ProcessFreeBSDKernelKVM : public ProcessFreeBSDKernel {
+public:
+  ProcessFreeBSDKernelKVM(lldb::TargetSP target_sp, lldb::ListenerSP listener,
+  kvm_t *fvc);
+
+  ~ProcessFreeBSDKernelKVM();
+
+  size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
+  lldb_private::Status &error) override;
+
+  const char *GetError();
+
+private:
+  kvm_t *m_kvm;
+};
+#endif // defined(__FreeBSD__)
+
+ProcessFreeBSDKernel::ProcessFreeBSDKernel(lldb::TargetSP target_sp,
+   ListenerSP listener_sp)
+: PostMortemProcess(target_sp, listener_sp) {}
 
 lldb::ProcessSP ProcessFreeBSDKernel::CreateInstance(lldb::TargetSP target_sp,
  ListenerSP listener_sp,
@@ -38,12 +73,23 @@
   lldb::ProcessSP process_sp;
   ModuleSP executable = target_sp->GetExecutableModule();
   if (crash_file && !can_connect && executable) {
-fvc_t *fvc = fvc_open(
-executable->GetFileSpec().GetPath().c_str(),
-crash_file->GetPath().c_str(), nullptr, nullptr, nullptr);
+#if LLDB_ENABLE_FBSDVMCORE
+fvc_t *fvc =
+fvc_open(executable->GetFileSpec().GetPath().c_str(),
+ crash_file->GetPath().c_str(), nullptr, nullptr, nullptr);
 if (fvc)
-  process_sp = std::make_shared(
-  target_sp, listener_sp, *crash_file, fvc);
+  process_sp = std::make_shared(target_sp,
+ listener_sp, fvc);
+#endif
+
+#if defined(__FreeBSD__)
+kvm_t *kvm =
+kvm_open2(executable->GetFileSpec().GetPath().c_str(),
+  crash_file->GetPath().c_str(), O_RDONLY, nullptr, nullptr);
+if (kvm)
+  process_s

[Lldb-commits] [PATCH] D116005: [lldb] [Process/FreeBSDKernel] Introduce libkvm support

2021-12-20 Thread Michał Górny via Phabricator via lldb-commits
mgorny added a comment.

In D116005#3202721 , @labath wrote:

> How about factoring the two implementations into subclasses. If the classes 
> are small, maybe you can just declare them in the cpp file...

Yes, that's a nice idea. As an extra, we can easily use the real pointer types 
and remove all these casts.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116005/new/

https://reviews.llvm.org/D116005

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D116012: Fix "settings set -g" so it works again.

2021-12-20 Thread Jonas Devlieghere via Phabricator via lldb-commits
JDevlieghere accepted this revision.
JDevlieghere added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116012/new/

https://reviews.llvm.org/D116012

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D116028: [lldb] Use GetSupportedArchitectures on darwin platforms

2021-12-20 Thread Jonas Devlieghere via Phabricator via lldb-commits
JDevlieghere accepted this revision.
JDevlieghere added a comment.
This revision is now accepted and ready to land.

This was on my todo-list for this week but you beat me to it. Thanks for taking 
care of this! LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116028/new/

https://reviews.llvm.org/D116028

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D115308: [LLDB] Uniquify Type in type list.

2021-12-20 Thread Zequan Wu via Phabricator via lldb-commits
zequanwu updated this revision to Diff 395543.
zequanwu added a comment.

Revert back to first diff.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115308/new/

https://reviews.llvm.org/D115308

Files:
  lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp


Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
===
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -1530,7 +1530,6 @@
 return type_sp;
 
   SymbolFileDWARF *dwarf = die.GetDWARF();
-  TypeList &type_list = dwarf->GetTypeList();
   DWARFDIE sc_parent_die = SymbolFileDWARF::GetParentSymbolContextDIE(die);
   dw_tag_t sc_parent_tag = sc_parent_die.Tag();
 
@@ -1550,10 +1549,6 @@
   if (symbol_context_scope != nullptr)
 type_sp->SetSymbolContextScope(symbol_context_scope);
 
-  // We are ready to put this type into the uniqued list up at the module
-  // level.
-  type_list.Insert(type_sp);
-
   dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
   return type_sp;
 }


Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
===
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -1530,7 +1530,6 @@
 return type_sp;
 
   SymbolFileDWARF *dwarf = die.GetDWARF();
-  TypeList &type_list = dwarf->GetTypeList();
   DWARFDIE sc_parent_die = SymbolFileDWARF::GetParentSymbolContextDIE(die);
   dw_tag_t sc_parent_tag = sc_parent_die.Tag();
 
@@ -1550,10 +1549,6 @@
   if (symbol_context_scope != nullptr)
 type_sp->SetSymbolContextScope(symbol_context_scope);
 
-  // We are ready to put this type into the uniqued list up at the module
-  // level.
-  type_list.Insert(type_sp);
-
   dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get();
   return type_sp;
 }
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D115308: [LLDB] Uniquify Type in type list.

2021-12-20 Thread Zequan Wu via Phabricator via lldb-commits
zequanwu added a comment.

In D115308#3189261 , @labath wrote:

> I don't know whether the types should be uniqued at this level (obviously, 
> they should be uniqued somewhere), but these are the thoughts that spring to 
> mind:
>
> - if this is a problem for lldb-test, then it would be preferable to come up 
> with a solution that does not negatively impact the performance and memory 
> consumption of the production code

I reverted it back to first diff. But I can't use lldb-test for testing 
purpose, since there is a problem for lldb-test that inserting duplicate types 
into type list (https://reviews.llvm.org/D115308?vs=on&id=392599#3188183).




Comment at: lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp:40
 // NAME-DAG: name = "foo", {{.*}} decl = find-basic-type.cpp:[[@LINE-1]]
+// TYPES: name = "foo", size = 1, decl = find-basic-type.cpp:[[@LINE-2]]
 

labath wrote:
> Does this actually check that the type is not emitted more than once?
> 
> This is the reason why the other checks have the "Found  types" assertion 
> above. We currently don't have such output from --find=none, but feel free to 
> add something.
> 
> It might also be better to make this a separate test, as the output also 
> includes things like `int` -- it would start to get messy if you included all 
> of that here, and this test was about testing something different anyway.
It actually still emits types more than once using lldb-test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115308/new/

https://reviews.llvm.org/D115308

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits