[Lldb-commits] [PATCH] D33025: [DWARF parser] Produce correct template parameter packs

2017-05-11 Thread Sean Callanan via Phabricator via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL302833: [DWARF parser] Produce correct template parameter 
packs (authored by spyffe).

Changed prior to commit:
  https://reviews.llvm.org/D33025?vs=98388=98687#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33025

Files:
  lldb/trunk/include/lldb/Symbol/ClangASTContext.h
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/Makefile
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/TestClassTemplateParameterPack.py
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/main.cpp
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
  lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
  lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
  lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
  lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp
  lldb/trunk/source/Symbol/ClangASTContext.cpp

Index: lldb/trunk/include/lldb/Symbol/ClangASTContext.h
===
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h
@@ -275,17 +275,16 @@
 bool IsValid() const {
   if (args.empty())
 return false;
-  return args.size() == names.size();
-}
-
-size_t GetSize() const {
-  if (IsValid())
-return args.size();
-  return 0;
+  return args.size() == names.size() &&
+((bool)pack_name == (bool)packed_args) &&
+(!packed_args || !packed_args->packed_args);
 }
 
 llvm::SmallVector names;
 llvm::SmallVector args;
+
+const char * pack_name = nullptr;
+std::unique_ptr packed_args;
   };
 
   clang::FunctionTemplateDecl *
Index: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
===
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
@@ -0,0 +1,6 @@
+from lldbsuite.test import lldbinline
+from lldbsuite.test import decorators
+
+lldbinline.MakeInlineTest(
+__file__, globals(), [
+decorators.expectedFailureAll(bugnumber="rdar://problem/32096064")])
Index: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
===
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
@@ -0,0 +1,24 @@
+//===-- main.cpp *- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LIDENSE.TXT for details.
+//
+//===--===//
+
+template  int staticSizeof() {
+  return sizeof(T);
+}
+
+template  int staticSizeof() {
+  return staticSizeof() + sizeof(T1);
+}
+
+int main (int argc, char const *argv[])
+{
+  int sz = staticSizeof();
+  return staticSizeof() != sz; //% self.expect("expression -- sz == staticSizeof()", "staticSizeof worked", substrs = ["true"])
+  //% self.expect("expression -- sz == staticSizeof() + sizeof(char)", "staticSizeof worked", substrs = ["true"])
+  //% self.expect("expression -- sz == staticSizeof() + sizeof(int) + sizeof(char)", "staticSizeof worked", substrs = ["true"])
+}
Index: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
===
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
@@ -0,0 +1,3 @@
+LEVEL = ../../../make
+CXX_SOURCES := main.cpp
+include $(LEVEL)/Makefile.rules
Index: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/Makefile
===
--- 

[Lldb-commits] [PATCH] D33025: [DWARF parser] Produce correct template parameter packs

2017-05-10 Thread Greg Clayton via Phabricator via lldb-commits
clayborg accepted this revision.
clayborg added a comment.
This revision is now accepted and ready to land.

Very nice


Repository:
  rL LLVM

https://reviews.llvm.org/D33025



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


[Lldb-commits] [PATCH] D33025: [DWARF parser] Produce correct template parameter packs

2017-05-09 Thread Sean Callanan via Phabricator via lldb-commits
spyffe created this revision.

Templates can end in parameter packs, like this

  template  struct MyStruct { /*...*/ };

LLDB does not currently support these parameter packs; it does not emit them 
into the template argument list at all.  This causes problems when you 
specialize, e.g.:

  template <> struct MyStruct { /*...*/ };
  template <> struct MyStruct : MyStruct { /*...*/ };

LLDB generates two template specializations, each with no template arguments, 
and then when they are imported by the `ASTImporter` into a parser's AST 
context we get a single specialization that inherits from itself, causing 
Clang's record layout mechanism to smash its stack.

This patch fixes the problem for classes and adds tests.  The tests for 
functions fail because Clang's `ASTImporter` can't import them at the moment, 
so I've xfailed that test.


Repository:
  rL LLVM

https://reviews.llvm.org/D33025

Files:
  include/lldb/Symbol/ClangASTContext.h
  packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/Makefile
  
packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/TestClassTemplateParameterPack.py
  packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/main.cpp
  
packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
  
packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
  
packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
  source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
  source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
  source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
  source/Plugins/SymbolFile/DWARF/DWARFDefines.cpp
  source/Symbol/ClangASTContext.cpp

Index: packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
===
--- packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
+++ packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/main.cpp
@@ -0,0 +1,24 @@
+//===-- main.cpp *- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LIDENSE.TXT for details.
+//
+//===--===//
+
+template  int staticSizeof() {
+  return sizeof(T);
+}
+
+template  int staticSizeof() {
+  return staticSizeof() + sizeof(T1);
+}
+
+int main (int argc, char const *argv[])
+{
+  int sz = staticSizeof();
+  return staticSizeof() != sz; //% self.expect("expression -- sz == staticSizeof()", "staticSizeof worked", substrs = ["true"])
+  //% self.expect("expression -- sz == staticSizeof() + sizeof(char)", "staticSizeof worked", substrs = ["true"])
+  //% self.expect("expression -- sz == staticSizeof() + sizeof(int) + sizeof(char)", "staticSizeof worked", substrs = ["true"])
+}
Index: packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
===
--- packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
+++ packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/TestFunctionTemplateParameterPack.py
@@ -0,0 +1,6 @@
+from lldbsuite.test import lldbinline
+from lldbsuite.test import decorators
+
+lldbinline.MakeInlineTest(
+__file__, globals(), [
+decorators.expectedFailureAll(bugnumber="rdar://problem/32096064")])
Index: packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
===
--- packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
+++ packages/Python/lldbsuite/test/lang/cpp/function-template-parameter-pack/Makefile
@@ -0,0 +1,3 @@
+LEVEL = ../../../make
+CXX_SOURCES := main.cpp
+include $(LEVEL)/Makefile.rules
Index: packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/main.cpp
===
--- packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/main.cpp
+++ packages/Python/lldbsuite/test/lang/cpp/class-template-parameter-pack/main.cpp
@@ -0,0 +1,61 @@
+//===-- main.cpp *- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LIDENSE.TXT for details.
+//
+//===--===//
+
+template