summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2014-07-31 17:39:50 +0000
committerFariborz Jahanian <fjahanian@apple.com>2014-07-31 17:39:50 +0000
commita1db7df243610bd5433c2147ecad9de76a1f7da4 (patch)
tree304c2409b7dd48c8d59fc52020c5368b0287fe6f
parentbe39a87e1126c229ed69985881d8fb8fc53ce4ff (diff)
downloadbcm5719-llvm-a1db7df243610bd5433c2147ecad9de76a1f7da4.tar.gz
bcm5719-llvm-a1db7df243610bd5433c2147ecad9de76a1f7da4.zip
Obective-C. Patch to fix the incorrect ObjcMessageExpr argument source ranges,
when arguments are structures or classes. PR16392. patch by Karlis Senko llvm-svn: 214409
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp2
-rw-r--r--clang/unittests/AST/MatchVerifier.h13
-rw-r--r--clang/unittests/AST/SourceLocationTest.cpp12
3 files changed, 25 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index fb2c02b77fe..2a0ccd5b069 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -1402,7 +1402,7 @@ bool Sema::CheckMessageArgumentTypes(QualType ReceiverType,
InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
param);
- ExprResult ArgE = PerformCopyInitialization(Entity, SelLoc, argExpr);
+ ExprResult ArgE = PerformCopyInitialization(Entity, SourceLocation(), argExpr);
if (ArgE.isInvalid())
IsError = true;
else
diff --git a/clang/unittests/AST/MatchVerifier.h b/clang/unittests/AST/MatchVerifier.h
index 0265f4a24a1..1e5a0d256eb 100644
--- a/clang/unittests/AST/MatchVerifier.h
+++ b/clang/unittests/AST/MatchVerifier.h
@@ -25,7 +25,14 @@
namespace clang {
namespace ast_matchers {
-enum Language { Lang_C, Lang_C89, Lang_CXX, Lang_CXX11, Lang_OpenCL };
+enum Language {
+ Lang_C,
+ Lang_C89,
+ Lang_CXX,
+ Lang_CXX11,
+ Lang_OpenCL,
+ Lang_OBJCXX
+};
/// \brief Base class for verifying some property of nodes found by a matcher.
template <typename NodeType>
@@ -102,6 +109,10 @@ testing::AssertionResult MatchVerifier<NodeType>::match(
break;
case Lang_OpenCL:
FileName = "input.cl";
+ break;
+ case Lang_OBJCXX:
+ FileName = "input.mm";
+ break;
}
// Default to failure in case callback is never called
diff --git a/clang/unittests/AST/SourceLocationTest.cpp b/clang/unittests/AST/SourceLocationTest.cpp
index 82bba64334b..ca5a8892a58 100644
--- a/clang/unittests/AST/SourceLocationTest.cpp
+++ b/clang/unittests/AST/SourceLocationTest.cpp
@@ -486,5 +486,17 @@ TEST(FriendDecl, InstantiationSourceRange) {
friendDecl(hasParent(recordDecl(isTemplateInstantiation())))));
}
+TEST(ObjCMessageExpr, CXXConstructExprRange) {
+ RangeVerifier<CXXConstructExpr> Verifier;
+ Verifier.expectRange(5, 25, 5, 27);
+ EXPECT_TRUE(Verifier.match(
+ "struct A { int a; };\n"
+ "@interface B {}\n"
+ "+ (void) f1: (A)arg;\n"
+ "@end\n"
+ "void f2() { A a; [B f1: (a)]; }\n",
+ constructExpr(), Lang_OBJCXX));
+}
+
} // end namespace ast_matchers
} // end namespace clang
OpenPOWER on IntegriCloud