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 lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits