aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaOverload.cpp4
-rw-r--r--test/SemaObjCXX/overload.mm9
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index d3e8243f94..89eb90bc13 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -155,7 +155,9 @@ bool StandardConversionSequence::isPointerConversionToBool() const {
// check for their presence as well as checking whether FromType is
// a pointer.
if (getToType(1)->isBooleanType() &&
- (getFromType()->isPointerType() || getFromType()->isBlockPointerType() ||
+ (getFromType()->isPointerType() ||
+ getFromType()->isObjCObjectPointerType() ||
+ getFromType()->isBlockPointerType() ||
First == ICK_Array_To_Pointer || First == ICK_Function_To_Pointer))
return true;
diff --git a/test/SemaObjCXX/overload.mm b/test/SemaObjCXX/overload.mm
index 18da69f544..487a42e1a1 100644
--- a/test/SemaObjCXX/overload.mm
+++ b/test/SemaObjCXX/overload.mm
@@ -93,3 +93,12 @@ void (*_NSExceptionRaiser(void))(NSException *) {
objc_exception_functions_t exc_funcs;
return exc_funcs.throw_exc; // expected-warning{{incompatible pointer types returning 'void (*)(NSException *)', expected 'void (*)(id)'}}
}
+
+namespace test5 {
+ void foo(bool);
+ void foo(void *);
+
+ void test(id p) {
+ foo(p);
+ }
+}