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

Sean Callanan via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue May 9 19:38:35 PDT 2017


spyffe created this revision.

Templates can end in parameter packs, like this

  template <class T...> 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<int> { /*...*/ };
  template <> struct MyStruct<int, int> : MyStruct<int> { /*...*/ };

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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33025.98388.patch
Type: text/x-patch
Size: 18778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20170510/444e60b6/attachment-0001.bin>


More information about the lldb-commits mailing list