summaryrefslogtreecommitdiff
path: root/clang
diff options
context:
space:
mode:
authorAleksei Sidorin <a.sidorin@samsung.com>2018-01-09 14:25:05 +0000
committerAleksei Sidorin <a.sidorin@samsung.com>2018-01-09 14:25:05 +0000
commitf4716937d35eace985f93feccd8fc9447242c7fa (patch)
tree00e1b1384e8bf894d26ad3dd40d9c06bc88e49f2 /clang
parent0583641ed96c07f83a06229f9606700592df32a8 (diff)
[ASTImporter] Fix missing SourceLoc import for ObjCMethodDecl selectors
Patch by Nico Rieck, test case by Sean Callanan! Differential Revision: https://reviews.llvm.org/D6550
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/ASTImporter.cpp6
-rw-r--r--clang/test/ASTMerge/interface/Inputs/interface1.m4
2 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp
index cca43eed3e6..11d31156b8e 100644
--- a/clang/lib/AST/ASTImporter.cpp
+++ b/clang/lib/AST/ASTImporter.cpp
@@ -2857,9 +2857,13 @@ Decl *ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {
ToParams[I]->setOwningFunction(ToMethod);
ToMethod->addDeclInternal(ToParams[I]);
}
+
SmallVector<SourceLocation, 12> SelLocs;
D->getSelectorLocs(SelLocs);
- ToMethod->setMethodParams(Importer.getToContext(), ToParams, SelLocs);
+ for (SourceLocation &Loc : SelLocs)
+ Loc = Importer.Import(Loc);
+
+ ToMethod->setMethodParams(Importer.getToContext(), ToParams, SelLocs);
ToMethod->setLexicalDeclContext(LexicalDC);
Importer.Imported(D, ToMethod);
diff --git a/clang/test/ASTMerge/interface/Inputs/interface1.m b/clang/test/ASTMerge/interface/Inputs/interface1.m
index 5865c0eff07..6192150089f 100644
--- a/clang/test/ASTMerge/interface/Inputs/interface1.m
+++ b/clang/test/ASTMerge/interface/Inputs/interface1.m
@@ -100,4 +100,6 @@
@implementation I15 : I12
@end
-
+@interface ImportSelectorSLoc { }
+-(int)addInt:(int)a toInt:(int)b moduloInt:(int)c; // don't crash here
+@end