diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2015-12-02 21:58:08 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2015-12-02 21:58:08 +0000 |
commit | 3e3bb95b6951c313dd5dd1c099184c309a3952e2 (patch) | |
tree | 601f182e5509276b9319182864eac0e27a888b68 /clang/test/CodeGenCXX/mangle-ms.cpp | |
parent | ba904d4ecf66528be5dadd60665d5a979ce6b1a4 (diff) | |
download | bcm5719-llvm-3e3bb95b6951c313dd5dd1c099184c309a3952e2.tar.gz bcm5719-llvm-3e3bb95b6951c313dd5dd1c099184c309a3952e2.zip |
Add the `pass_object_size` attribute to clang.
`pass_object_size` is our way of enabling `__builtin_object_size` to
produce high quality results without requiring inlining to happen
everywhere.
A link to the design doc for this attribute is available at the
Differential review link below.
Differential Revision: http://reviews.llvm.org/D13263
llvm-svn: 254554
Diffstat (limited to 'clang/test/CodeGenCXX/mangle-ms.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/mangle-ms.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/mangle-ms.cpp b/clang/test/CodeGenCXX/mangle-ms.cpp index 54855ec5a4d..98277dc9a30 100644 --- a/clang/test/CodeGenCXX/mangle-ms.cpp +++ b/clang/test/CodeGenCXX/mangle-ms.cpp @@ -418,3 +418,22 @@ void f(S::T6) {} // X64-DAG: @"\01?f@UnnamedType@@YAXUT5@S@1@@Z" // X64-DAG: @"\01?f@UnnamedType@@YAXPEAU<unnamed-type-T6>@S@1@@Z" } + +namespace PassObjectSize { +// NOTE: This mangling is subject to change. +// Reiterating from the comment in MicrosoftMangle, the scheme is pretend a +// parameter of type __clang::__pass_object_sizeN exists after each pass object +// size param P, where N is the Type of the pass_object_size attribute on P. +// +// e.g. we want to mangle: +// void foo(void *const __attribute__((pass_object_size(0)))); +// as if it were +// namespace __clang { enum __pass_object_size0 : size_t {}; } +// void foo(void *const, __clang::__pass_object_size0); +// where __clang is a top-level namespace. + +// CHECK-DAG: define i32 @"\01?foo@PassObjectSize@@YAHQAHW4__pass_object_size0@__clang@@@Z" +int foo(int *const i __attribute__((pass_object_size(0)))) { return 0; } +// CHECK-DAG: define i32 @"\01?bar@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@@Z" +int bar(int *const i __attribute__((pass_object_size(1)))) { return 0; } +} |