Fixed a problem where variables in modules were not appropriately discovered by

the expression parser.

<rdar://problem/21395220>

llvm-svn: 241917
This commit is contained in:
Sean Callanan 2015-07-10 17:34:23 +00:00
parent 03ce2a16bf
commit 9ff456c8a2
2 changed files with 28 additions and 0 deletions

View File

@ -1527,6 +1527,31 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context,
context.m_found.function_with_type_info = true;
context.m_found.function = true;
}
else if (llvm::isa<clang::VarDecl>(decl_from_modules))
{
if (log)
{
log->Printf(" CAS::FEVD[%u] Matching variable found for \"%s\" in the modules",
current_id,
name.GetCString());
}
clang::Decl *copied_decl = m_ast_importer->CopyDecl(m_ast_context, &decl_from_modules->getASTContext(), decl_from_modules);
clang::VarDecl *copied_var_decl = copied_decl ? dyn_cast_or_null<clang::VarDecl>(copied_decl) : nullptr;
if (!copied_var_decl)
{
if (log)
log->Printf(" CAS::FEVD[%u] - Couldn't export a variable declaration from the modules",
current_id);
break;
}
context.AddNamedDecl(copied_var_decl);
context.m_found.variable = true;
}
}
} while (0);
}

View File

@ -74,6 +74,9 @@ class CModulesTestCase(TestBase):
self.expect("expr MIN((uint64_t)2, (uint64_t)3)", VARIABLES_DISPLAYED_CORRECTLY,
substrs = ["uint64_t", "2"])
self.expect("expr stdin", VARIABLES_DISPLAYED_CORRECTLY,
substrs = ["(FILE *)", "0x"])
if __name__ == '__main__':
import atexit