diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp --- a/clang/lib/AST/ASTImporter.cpp +++ b/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 ToDefaultArgOrErr = + import(D->getDefaultArgumentInfo()); + if (!ToDefaultArgOrErr) + return ToDefaultArgOrErr.takeError(); + ToD->setDefaultArgument(*ToDefaultArgOrErr); + } + return ToD; } diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -880,6 +880,25 @@ has(fieldDecl(hasType(dependentSizedArrayType()))))))); } +TEST_P(ASTImporterOptionSpecificTestBase, TemplateTypeParmDeclNoDefaultArg) { + Decl *FromTU = getTuDecl("template struct X {};", Lang_CXX03); + auto From = FirstDeclMatcher().match( + FromTU, templateTypeParmDecl(hasName("T"))); + TemplateTypeParmDecl *To = Import(From, Lang_CXX03); + ASSERT_FALSE(To->hasDefaultArgument()); +} + +TEST_P(ASTImporterOptionSpecificTestBase, TemplateTypeParmDeclDefaultArg) { + Decl *FromTU = + getTuDecl("template struct X {};", Lang_CXX03); + auto From = FirstDeclMatcher().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; }", diff --git a/lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/deque-basic/TestDequeFromStdModule.py +++ b/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 >" + deque_type = "std::deque" size_type = deque_type + "::size_type" value_type = "std::__deque_base >::value_type" iterator = deque_type + "::iterator" diff --git a/lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/deque-dbg-info-content/TestDbgInfoContentDequeFromStdModule.py +++ b/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 >" + deque_type = "std::deque" size_type = deque_type + "::size_type" value_type = "std::__deque_base >::value_type" diff --git a/lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/forward_list-dbg-info-content/TestDbgInfoContentForwardListFromStdModule.py +++ b/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 >" + list_type = "std::forward_list" value_type = list_type + "::value_type" # FIXME: This has three elements in it but the formatter seems to diff --git a/lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/forward_list/TestForwardListFromStdModule.py +++ b/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 >" + list_type = "std::forward_list" value_type = list_type + "::value_type" # FIXME: This has three elements in it but the formatter seems to diff --git a/lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/list-dbg-info-content/TestDbgInfoContentListFromStdModule.py +++ b/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 >" + list_type = "std::list" size_type = list_type + "::size_type" value_type = list_type + "::value_type" diff --git a/lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/list/TestListFromStdModule.py +++ b/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 >" + list_type = "std::list" size_type = list_type + "::size_type" value_type = list_type + "::value_type" diff --git a/lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/queue/TestQueueFromStdModule.py +++ b/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 > >" + queue_type = "std::queue" size_type = queue_type + "::size_type" value_type = "std::__deque_base >::value_type" @@ -54,9 +54,9 @@ result_value="5") # Test std::queue functionality with a std::list. - queue_type = "std::queue > >" + queue_type = "std::queue >" size_type = queue_type + "::size_type" - value_type = "std::list >::value_type" + value_type = "std::list::value_type" self.expect_expr( "q_list", result_type=queue_type, diff --git a/lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/stack/TestStackFromStdModule.py +++ b/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 > >" + stack_type = "std::stack" 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 > >" + stack_type = "std::stack >" 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 > >" + stack_type = "std::stack >" size_type = stack_type + "::size_type" self.expect_expr("s_list", result_type=stack_type) self.expect("expr s_list.pop()") diff --git a/lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py b/lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py --- a/lldb/test/API/commands/expression/import-std-module/unique_ptr-dbg-info-content/TestUniquePtrDbgInfoContent.py +++ b/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 >", + result_type="std::unique_ptr", 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") diff --git a/lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/unique_ptr/TestUniquePtrFromStdModule.py +++ b/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 >", + result_type="std::unique_ptr", result_summary="3", result_children=[ValueCheck(name="__value_")]) self.expect_expr("*s", result_type="int", result_value="3") diff --git a/lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/vector-bool/TestVectorBoolFromStdModule.py +++ b/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 >" + vector_type = "std::vector" size_type = vector_type + "::size_type" self.runCmd("settings set target.import-std-module true") diff --git a/lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/vector-dbg-info-content/TestDbgInfoContentVectorFromStdModule.py +++ b/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 >" + vector_type = "std::vector" size_type = vector_type + "::size_type" value_type = vector_type + "::value_type" iterator = vector_type + "::iterator" diff --git a/lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/vector-of-vectors/TestVectorOfVectorsFromStdModule.py +++ b/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 >" - vector_of_vector_type = "std::vector<" + vector_type + \ - ", std::allocator > > >" - size_type = ( - "std::vector >, " + - "std::allocator > >" + - " >::size_type") + vector_type = "std::vector" + vector_of_vector_type = "std::vector<" + vector_type + " >" + size_type = vector_of_vector_type + "::size_type" value_type = "std::__vector_base >::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 >", + ValueCheck(type="std::vector", children=[ ValueCheck(value='1'), ValueCheck(value='2'), ValueCheck(value='3'), ]), - ValueCheck(type="std::vector >", + ValueCheck(type="std::vector", children=[ ValueCheck(value='3'), ValueCheck(value='2'), diff --git a/lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py --- a/lldb/test/API/commands/expression/import-std-module/vector/TestVectorFromStdModule.py +++ b/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 >" + vector_type = "std::vector" size_type = vector_type + "::size_type" value_type = "std::__vector_base >::value_type" iterator = vector_type + "::iterator"