This revision was automatically updated to reflect the committed changes.
Closed by commit rG3f6c856bb5ae: [ASTImporter] Import the default argument of
TemplateTypeParmDecl (authored by teemperor).
Herald added projects: clang, LLDB.
Herald added subscribers: lldb-commits, cfe-commits.
Changed prior to commit:
https://reviews.llvm.org/D92103?vs=307614&id=307891#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92103/new/
https://reviews.llvm.org/D92103
Files:
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp
lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py
lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py
lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py
lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py
lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py
lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py
lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py
lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py
lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py
lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py
lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py
lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py
lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py
lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py
Index: lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- vector_type = "std::vector<int, std::allocator<int> >"
+ vector_type = "std::vector<int>"
size_type = vector_type + "::size_type"
value_type = "std::__vector_base<int, std::allocator<int> >::value_type"
iterator = vector_type + "::iterator"
Index: lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py
@@ -20,13 +20,9 @@
"// Set break point at this line.",
lldb.SBFileSpec("main.cpp"))
- vector_type = "std::vector<int, std::allocator<int> >"
- vector_of_vector_type = "std::vector<" + vector_type + \
- ", std::allocator<std::vector<int, std::allocator<int> > > >"
- size_type = (
- "std::vector<std::vector<int, std::allocator<int> >, " +
- "std::allocator<std::vector<int, std::allocator<int> > >" +
- " >::size_type")
+ vector_type = "std::vector<int>"
+ vector_of_vector_type = "std::vector<" + vector_type + " >"
+ size_type = vector_of_vector_type + "::size_type"
value_type = "std::__vector_base<int, std::allocator<int> >::value_type"
self.runCmd("settings set target.import-std-module true")
@@ -35,13 +31,13 @@
"a",
result_type=vector_of_vector_type,
result_children=[
- ValueCheck(type="std::vector<int, std::allocator<int> >",
+ ValueCheck(type="std::vector<int>",
children=[
ValueCheck(value='1'),
ValueCheck(value='2'),
ValueCheck(value='3'),
]),
- ValueCheck(type="std::vector<int, std::allocator<int> >",
+ ValueCheck(type="std::vector<int>",
children=[
ValueCheck(value='3'),
ValueCheck(value='2'),
Index: lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py
@@ -23,7 +23,7 @@
self.runCmd("settings set target.import-std-module true")
- vector_type = "std::vector<Foo, std::allocator<Foo> >"
+ vector_type = "std::vector<Foo>"
size_type = vector_type + "::size_type"
value_type = vector_type + "::value_type"
iterator = vector_type + "::iterator"
Index: lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py
@@ -20,7 +20,7 @@
"// Set break point at this line.",
lldb.SBFileSpec("main.cpp"))
- vector_type = "std::vector<bool, std::allocator<bool> >"
+ vector_type = "std::vector<bool>"
size_type = vector_type + "::size_type"
self.runCmd("settings set target.import-std-module true")
Index: lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py
@@ -25,7 +25,7 @@
self.expect_expr(
"s",
- result_type="std::unique_ptr<int, std::default_delete<int> >",
+ result_type="std::unique_ptr<int>",
result_summary="3",
result_children=[ValueCheck(name="__value_")])
self.expect_expr("*s", result_type="int", result_value="3")
Index: lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py
+++ lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py
@@ -25,7 +25,7 @@
self.expect_expr(
"s",
- result_type="std::unique_ptr<Foo, std::default_delete<Foo> >",
+ result_type="std::unique_ptr<Foo>",
result_children=[ValueCheck(children=[ValueCheck(value="3")])])
self.expect_expr("s->a", result_type="int", result_value="3")
self.expect_expr("s->a = 5", result_type="int", result_value="5")
Index: lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
# Test std::stack functionality with a std::deque.
- stack_type = "std::stack<C, std::deque<C, std::allocator<C> > >"
+ stack_type = "std::stack<C>"
size_type = stack_type + "::size_type"
self.expect_expr("s_deque", result_type=stack_type)
@@ -40,7 +40,7 @@
result_value="5")
# Test std::stack functionality with a std::vector.
- stack_type = "std::stack<C, std::vector<C, std::allocator<C> > >"
+ stack_type = "std::stack<C, std::vector<C> >"
size_type = stack_type + "::size_type"
self.expect_expr("s_vector", result_type=stack_type)
@@ -58,7 +58,7 @@
result_value="5")
# Test std::stack functionality with a std::list.
- stack_type = "std::stack<C, std::list<C, std::allocator<C> > >"
+ stack_type = "std::stack<C, std::list<C> >"
size_type = stack_type + "::size_type"
self.expect_expr("s_list", result_type=stack_type)
self.expect("expr s_list.pop()")
Index: lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- queue_type = "std::queue<C, std::deque<C, std::allocator<C> > >"
+ queue_type = "std::queue<C>"
size_type = queue_type + "::size_type"
value_type = "std::__deque_base<C, std::allocator<C> >::value_type"
@@ -54,9 +54,9 @@
result_value="5")
# Test std::queue functionality with a std::list.
- queue_type = "std::queue<C, std::list<C, std::allocator<C> > >"
+ queue_type = "std::queue<C, std::list<C> >"
size_type = queue_type + "::size_type"
- value_type = "std::list<C, std::allocator<C> >::value_type"
+ value_type = "std::list<C>::value_type"
self.expect_expr(
"q_list",
result_type=queue_type,
Index: lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- list_type = "std::list<int, std::allocator<int> >"
+ list_type = "std::list<int>"
size_type = list_type + "::size_type"
value_type = list_type + "::value_type"
Index: lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py
@@ -23,7 +23,7 @@
self.runCmd("settings set target.import-std-module true")
- list_type = "std::list<Foo, std::allocator<Foo> >"
+ list_type = "std::list<Foo>"
size_type = list_type + "::size_type"
value_type = list_type + "::value_type"
Index: lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- list_type = "std::forward_list<int, std::allocator<int> >"
+ list_type = "std::forward_list<int>"
value_type = list_type + "::value_type"
# FIXME: This has three elements in it but the formatter seems to
Index: lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- list_type = "std::forward_list<Foo, std::allocator<Foo> >"
+ list_type = "std::forward_list<Foo>"
value_type = list_type + "::value_type"
# FIXME: This has three elements in it but the formatter seems to
Index: lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- deque_type = "std::deque<Foo, std::allocator<Foo> >"
+ deque_type = "std::deque<Foo>"
size_type = deque_type + "::size_type"
value_type = "std::__deque_base<Foo, std::allocator<Foo> >::value_type"
Index: lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py
===================================================================
--- lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py
+++ lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py
@@ -22,7 +22,7 @@
self.runCmd("settings set target.import-std-module true")
- deque_type = "std::deque<int, std::allocator<int> >"
+ deque_type = "std::deque<int>"
size_type = deque_type + "::size_type"
value_type = "std::__deque_base<int, std::allocator<int> >::value_type"
iterator = deque_type + "::iterator"
Index: clang/unittests/AST/ASTImporterTest.cpp
===================================================================
--- clang/unittests/AST/ASTImporterTest.cpp
+++ clang/unittests/AST/ASTImporterTest.cpp
@@ -880,6 +880,25 @@
has(fieldDecl(hasType(dependentSizedArrayType())))))));
}
+TEST_P(ASTImporterOptionSpecificTestBase, TemplateTypeParmDeclNoDefaultArg) {
+ Decl *FromTU = getTuDecl("template<typename T> struct X {};", Lang_CXX03);
+ auto From = FirstDeclMatcher<TemplateTypeParmDecl>().match(
+ FromTU, templateTypeParmDecl(hasName("T")));
+ TemplateTypeParmDecl *To = Import(From, Lang_CXX03);
+ ASSERT_FALSE(To->hasDefaultArgument());
+}
+
+TEST_P(ASTImporterOptionSpecificTestBase, TemplateTypeParmDeclDefaultArg) {
+ Decl *FromTU =
+ getTuDecl("template<typename T = int> struct X {};", Lang_CXX03);
+ auto From = FirstDeclMatcher<TemplateTypeParmDecl>().match(
+ FromTU, templateTypeParmDecl(hasName("T")));
+ TemplateTypeParmDecl *To = Import(From, Lang_CXX03);
+ ASSERT_TRUE(To->hasDefaultArgument());
+ QualType ToArg = To->getDefaultArgument();
+ ASSERT_EQ(ToArg, QualType(To->getASTContext().IntTy));
+}
+
TEST_P(ASTImporterOptionSpecificTestBase, ImportBeginLocOfDeclRefExpr) {
Decl *FromTU =
getTuDecl("class A { public: static int X; }; void f() { (void)A::X; }",
Index: clang/lib/AST/ASTImporter.cpp
===================================================================
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -5158,8 +5158,6 @@
// context. This context will be fixed when the actual template declaration
// is created.
- // FIXME: Import default argument and constraint expression.
-
ExpectedSLoc BeginLocOrErr = import(D->getBeginLoc());
if (!BeginLocOrErr)
return BeginLocOrErr.takeError();
@@ -5206,6 +5204,14 @@
ToIDC);
}
+ if (D->hasDefaultArgument()) {
+ Expected<TypeSourceInfo *> ToDefaultArgOrErr =
+ import(D->getDefaultArgumentInfo());
+ if (!ToDefaultArgOrErr)
+ return ToDefaultArgOrErr.takeError();
+ ToD->setDefaultArgument(*ToDefaultArgOrErr);
+ }
+
return ToD;
}
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits