From: John McCall Date: Fri, 11 Jun 2010 10:04:22 +0000 (+0000) Subject: Conversions from Objective C object pointers to bool are "pointer conversions X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ddb0ce750c425af474008f091fb7a3483e980335;p=clang Conversions from Objective C object pointers to bool are "pointer conversions to bool" in the sense of C++ [over.ics.rank]p4 bullet 1. I have decreed it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105817 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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); + } +}