summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2017-04-11 22:01:33 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2017-04-11 22:01:33 +0000
commitad51539597c585bf049dda826deca6bef9caf3a4 (patch)
tree8a25241b6e6eb6dca87134856ba51d542304c469 /clang/lib
parentcaf24d2b6c8c51d103a4bde06a6ab81a4b2866fb (diff)
downloadbcm5719-llvm-ad51539597c585bf049dda826deca6bef9caf3a4.tar.gz
bcm5719-llvm-ad51539597c585bf049dda826deca6bef9caf3a4.zip
[Sema][ObjC] Check whether a variable has a definition, rather than
checking its storage class, when determining whether casting a C pointer to an ObjC pointer is allowed. This change allows casting variables whose declarations are directly contained in a linkage specification to an ObjC pointer type. Those variables are treated as if they contain the extern specifier for the purpose of determining whether they are definitions or not. rdar://problem/29249853 Differential Revision: https://reviews.llvm.org/D31673 llvm-svn: 299992
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index c883f2e2fe7..9cc443ed4fd 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -3355,7 +3355,7 @@ namespace {
if (isAnyRetainable(TargetClass) &&
isAnyRetainable(SourceClass) &&
var &&
- var->getStorageClass() == SC_Extern &&
+ !var->hasDefinition(Context) &&
var->getType().isConstQualified()) {
// In system headers, they can also be assumed to be immune to retains.
OpenPOWER on IntegriCloud