diff --git a/lib/Interpreter/CppInterOp.cpp b/lib/Interpreter/CppInterOp.cpp index 0cedd0bee..cf16c588c 100644 --- a/lib/Interpreter/CppInterOp.cpp +++ b/lib/Interpreter/CppInterOp.cpp @@ -823,7 +823,7 @@ namespace Cpp { } if (auto* FD = llvm::dyn_cast_or_null(D)) { - return (FD->getTemplatedDecl())->getReturnType().getAsOpaquePtr(); + return (FD->getTemplatedDecl())->getReturnType().getAsOpaquePtr(); } return 0; diff --git a/unittests/CppInterOp/FunctionReflectionTest.cpp b/unittests/CppInterOp/FunctionReflectionTest.cpp index d5fdea8c2..f8b86d1e5 100644 --- a/unittests/CppInterOp/FunctionReflectionTest.cpp +++ b/unittests/CppInterOp/FunctionReflectionTest.cpp @@ -238,6 +238,16 @@ TEST(FunctionReflectionTest, GetFunctionReturnType) { int f () { return 0; } }; + void f1() {} + double f2() { return 0.2; } + Switch f3() { return ON; } + N::C f4() { return N::C(); } + N::C *f5() { return new N::C(); } + const N::C f6() { return N::C(); } + volatile N::C f7() { return N::C(); } + const volatile N::C f8() { return N::C(); } + int n; + class MyTemplatedMethodClass { template char get_string(A) { @@ -252,38 +262,41 @@ TEST(FunctionReflectionTest, GetFunctionReturnType) { return sizeof(A) + i; } }; - - void f1() {} - double f2() { return 0.2; } - Switch f3() { return ON; } - N::C f4() { return N::C(); } - N::C *f5() { return new N::C(); } - const N::C f6() { return N::C(); } - volatile N::C f7() { return N::C(); } - const volatile N::C f8() { return N::C(); } - int n; )"; GetAllTopLevelDecls(code, Decls, true); GetAllSubDecls(Decls[2], SubDecls); - GetAllSubDecls(Decls[3], TemplateSubDecls); + GetAllSubDecls(Decls[12], TemplateSubDecls); // #include - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[4])), "void"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[5])), "double"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[6])), "Switch"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[7])), "N::C"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[8])), "N::C *"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[9])), "const N::C"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[10])), "volatile N::C"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[11])), "const volatile N::C"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[12])), "NULL TYPE"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[3])), "void"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[4])), + "double"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[5])), + "Switch"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[6])), "N::C"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[7])), + "N::C *"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[8])), + "const N::C"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[9])), + "volatile N::C"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[10])), + "const volatile N::C"); + EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(Decls[11])), + "NULL TYPE"); EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(SubDecls[1])), "void"); EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(SubDecls[2])), "int"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[1])), "char"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[2])), "void"); - EXPECT_EQ(Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[3])), "long"); + EXPECT_EQ( + Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[1])), + "char"); + EXPECT_EQ( + Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[2])), + "void"); + EXPECT_EQ( + Cpp::GetTypeAsString(Cpp::GetFunctionReturnType(TemplateSubDecls[3])), + "long"); } TEST(FunctionReflectionTest, GetFunctionNumArgs) {