Page MenuHomePhabricator

[DWARF parser] Produce correct template parameter packs
ClosedPublic

Authored by spyffe on May 9 2017, 7:38 PM.

Details

Summary

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.

Diff Detail

Repository
rL LLVM

Event Timeline

spyffe created this revision.May 9 2017, 7:38 PM
clayborg accepted this revision.May 10 2017, 5:26 PM

Very nice

This revision is now accepted and ready to land.May 10 2017, 5:26 PM
This revision was automatically updated to reflect the committed changes.