diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2017-06-27 21:31:31 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2017-06-27 21:31:31 +0000 |
commit | d3cf025ae22188a15e8249a5c69bcf71aa4450e2 (patch) | |
tree | 49e6129dff948b59f8b519373ac4f52b5ca345c1 /clang/test/CodeGen/mangle-ms.c | |
parent | 0b7688e6c0048cfcb9834c00d31b975eea30d849 (diff) | |
download | bcm5719-llvm-d3cf025ae22188a15e8249a5c69bcf71aa4450e2.tar.gz bcm5719-llvm-d3cf025ae22188a15e8249a5c69bcf71aa4450e2.zip |
[Sema] Allow unmarked overloadable functions.
This patch extends the `overloadable` attribute to allow for one
function with a given name to not be marked with the `overloadable`
attribute. The overload without the `overloadable` attribute will not
have its name mangled.
So, the following code is now legal:
void foo(void) __attribute__((overloadable));
void foo(int);
void foo(float) __attribute__((overloadable));
In addition, this patch fixes a bug where we'd accept code with
`__attribute__((overloadable))` inconsistently applied. In other words,
we used to accept:
void foo(void);
void foo(void) __attribute__((overloadable));
But we will do this no longer, since it defeats the original purpose of
requiring `__attribute__((overloadable))` on all redeclarations of a
function.
This breakage seems to not be an issue in practice, since the only code
I could find that had this pattern often looked like:
void foo(void);
void foo(void) __attribute__((overloadable)) __asm__("foo");
void foo(int) __attribute__((overloadable));
...Which can now be simplified by simply removing the asm label and
overloadable attribute from the redeclaration of `void foo(void);`
Differential Revision: https://reviews.llvm.org/D32332
llvm-svn: 306467
Diffstat (limited to 'clang/test/CodeGen/mangle-ms.c')
-rw-r--r-- | clang/test/CodeGen/mangle-ms.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/test/CodeGen/mangle-ms.c b/clang/test/CodeGen/mangle-ms.c index 0ad43d5e06c..042c72e6d79 100644 --- a/clang/test/CodeGen/mangle-ms.c +++ b/clang/test/CodeGen/mangle-ms.c @@ -2,3 +2,12 @@ // CHECK: define void @"\01?f@@$$J0YAXP6AX@Z@Z" __attribute__((overloadable)) void f(void (*x)()) {} + +// CHECK: define void @f +void f(void (*x)(int)) {} + +// CHECK: define void @g +void g(void (*x)(int)) {} + +// CHECK: define void @"\01?g@@$$J0YAXP6AX@Z@Z" +__attribute__((overloadable)) void g(void (*x)()) {} |