forked from OSchip/llvm-project
[ASTImporter] Fix import of NestedNameSpecifierLoc.
Summary: Import type location in case of TypeSpec and TypeSpecWithTemplate. Without this fix the imported NespedNameSpecifierLoc will have an invalid begin location. Reviewers: a.sidorin, shafik, a_sidorin, martong Reviewed By: a_sidorin Subscribers: rnkovacs, jdoerfert, dkrupp, martong, Szelethus, gamesh411, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D55358 llvm-svn: 356151
This commit is contained in:
parent
989eca62c6
commit
5f4fd8b79b
|
@ -8092,8 +8092,11 @@ ASTImporter::Import_New(NestedNameSpecifierLoc FromNNS) {
|
|||
|
||||
case NestedNameSpecifier::TypeSpec:
|
||||
case NestedNameSpecifier::TypeSpecWithTemplate: {
|
||||
SourceLocation ToTLoc;
|
||||
if (Error Err = importInto(ToTLoc, NNS.getTypeLoc().getBeginLoc()))
|
||||
return std::move(Err);
|
||||
TypeSourceInfo *TSI = getToContext().getTrivialTypeSourceInfo(
|
||||
QualType(Spec->getAsType(), 0));
|
||||
QualType(Spec->getAsType(), 0), ToTLoc);
|
||||
Builder.Extend(getToContext(), ToLocalBeginLoc, TSI->getTypeLoc(),
|
||||
ToLocalEndLoc);
|
||||
break;
|
||||
|
|
|
@ -1232,6 +1232,26 @@ TEST_P(ImportExpr, DependentSizedArrayType) {
|
|||
has(fieldDecl(hasType(dependentSizedArrayType())))))));
|
||||
}
|
||||
|
||||
TEST_P(ASTImporterOptionSpecificTestBase, ImportBeginLocOfDeclRefExpr) {
|
||||
Decl *FromTU = getTuDecl(
|
||||
"class A { public: static int X; }; void f() { (void)A::X; }", Lang_CXX);
|
||||
auto From = FirstDeclMatcher<FunctionDecl>().match(
|
||||
FromTU, functionDecl(hasName("f")));
|
||||
ASSERT_TRUE(From);
|
||||
ASSERT_TRUE(
|
||||
cast<CStyleCastExpr>(cast<CompoundStmt>(From->getBody())->body_front())
|
||||
->getSubExpr()
|
||||
->getBeginLoc()
|
||||
.isValid());
|
||||
FunctionDecl *To = Import(From, Lang_CXX);
|
||||
ASSERT_TRUE(To);
|
||||
ASSERT_TRUE(
|
||||
cast<CStyleCastExpr>(cast<CompoundStmt>(To->getBody())->body_front())
|
||||
->getSubExpr()
|
||||
->getBeginLoc()
|
||||
.isValid());
|
||||
}
|
||||
|
||||
TEST_P(ASTImporterOptionSpecificTestBase,
|
||||
ImportOfTemplatedDeclOfClassTemplateDecl) {
|
||||
Decl *FromTU = getTuDecl("template<class X> struct S{};", Lang_CXX);
|
||||
|
|
Loading…
Reference in New Issue