]> granicus.if.org Git - clang/commit
[Sema] Allow implicit conversions of &overloaded_fn in C.
authorGeorge Burgess IV <george.burgess.iv@gmail.com>
Wed, 23 Mar 2016 02:33:58 +0000 (02:33 +0000)
committerGeorge Burgess IV <george.burgess.iv@gmail.com>
Wed, 23 Mar 2016 02:33:58 +0000 (02:33 +0000)
commit9aa1acdc934b01e5feb33a5f8b104fe5c558f168
tree853472e3ad7b7f673f79041aab2d772d3d0223ff
parent4caa683f4f6e9919ba4631bd0a49831eb458b94a
[Sema] Allow implicit conversions of &overloaded_fn in C.

Also includes a minor ``enable_if`` docs update.

Currently, our address-of overload machinery will only allow implicit
conversions of overloaded functions to void* in C. For example:

```
void f(int) __attribute__((overloadable));
void f(double) __attribute__((overloadable, enable_if(0, "")));

void *fp = f; // OK. This is C and the target is void*.
void (*fp2)(void) = f; // Error. This is C, but the target isn't void*.
```

This patch makes the assignment of `fp2` select the `f(int)` overload,
rather than emitting an error (N.B. you'll still get a warning about the
`fp2` assignment if you use -Wincompatible-pointer-types).

Differential Revision: http://reviews.llvm.org/D13704

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264132 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/AttrDocs.td
lib/Sema/SemaOverload.cpp
test/CodeGen/overloadable.c
test/Sema/overloadable.c
test/Sema/pass-object-size.c