diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -2538,6 +2538,7 @@ value_check = ValueCheck(type=result_type, value=result_value, summary=result_summary, children=result_children) value_check.check_value(self, eval_result, str(eval_result)) + return eval_result def invoke(self, obj, name, trace=False): """Use reflection to call a method dynamically with no argument.""" diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -4495,6 +4495,7 @@ clang_ast, decl_ctx, clang::SourceLocation(), clang::SourceLocation(), &clang_ast.Idents.get(typedef_name), clang_ast.getTrivialTypeSourceInfo(qual_type)); + decl_ctx->addDecl(decl); SetOwningModule(decl, TypePayloadClang(payload).GetOwningModule()); clang::TagDecl *tdecl = nullptr; diff --git a/lldb/test/API/lang/cpp/typedef/TestCppTypedef.py b/lldb/test/API/lang/cpp/typedef/TestCppTypedef.py --- a/lldb/test/API/lang/cpp/typedef/TestCppTypedef.py +++ b/lldb/test/API/lang/cpp/typedef/TestCppTypedef.py @@ -29,8 +29,16 @@ # First of all, check that we can get a typedefed type correctly in a simple case - expr_result = frame.EvaluateExpression("(SF)s") - self.assertTrue(expr_result.IsValid(), "Expression failed with: " + str(expr_result.GetError())) + expr_result = self.expect_expr("(SF)s", result_children=[ValueCheck(value="0.5")]) + self.expect_expr("(ns::SF)s", result_children=[ValueCheck(value="0.5")]) + self.expect_expr("(ST::SF)s", result_children=[ValueCheck(value="0.5")]) + + self.filecheck("image dump ast a.out", __file__, "--strict-whitespace") +# CHECK: {{^}}|-TypedefDecl {{.*}} SF 'S' +# CHECK: {{^}}|-NamespaceDecl {{.*}} ns +# CHECK-NEXT: {{^}}| `-TypedefDecl {{.*}} SF 'S' +# CHECK: {{^}}`-CXXRecordDecl {{.*}} struct ST definition +# CHECK: {{^}} `-TypedefDecl {{.*}} SF 'S' typedef_type = expr_result.GetType(); self.assertTrue(typedef_type.IsValid(), "Can't get `SF` type of evaluated expression") diff --git a/lldb/test/API/lang/cpp/typedef/main.cpp b/lldb/test/API/lang/cpp/typedef/main.cpp --- a/lldb/test/API/lang/cpp/typedef/main.cpp +++ b/lldb/test/API/lang/cpp/typedef/main.cpp @@ -7,7 +7,16 @@ typedef S SF; +namespace ns { +typedef S SF; +} +struct ST { + typedef S SF; +}; + int main (int argc, char const *argv[]) { SF s{ .5 }; + ns::SF in_ns; + ST::SF in_struct; return 0; // Set a breakpoint here }