diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-02-18 12:58:35 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-02-18 12:58:35 +0000 |
commit | 8bd69ae74382c85c528a072312d36854b58d2b6f (patch) | |
tree | 219fba8cca8aeed15f8e9509646e2b212743137d /test | |
parent | 48788de5c8ff8ac4d2766ed9de3447984a2692c6 (diff) | |
download | clang-8bd69ae74382c85c528a072312d36854b58d2b6f.tar.gz |
MS ABI: Add support for mangling __restrict
Pointer types in the MSVC ABI are a bit awkward, the width of the
pointer is considered a kind of CVR qualifier.
Restrict is handled similarly to const and volatile but is mangled after
the pointer width qualifier.
This fixes PR18880.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201569 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp | 20 | ||||
-rw-r--r-- | test/CodeGenCXX/mangle-ms.cpp | 5 |
2 files changed, 25 insertions, 0 deletions
diff --git a/test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp b/test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp index 58f24d5f14..fae2e1ab2d 100644 --- a/test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp +++ b/test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp @@ -37,6 +37,22 @@ void foo_sad(char * const volatile x) {} // CHECK: "\01?foo_sad@@YAXSAD@Z" // X64: "\01?foo_sad@@YAXSEAD@Z" +void foo_piad(char * __restrict x) {} +// CHECK: "\01?foo_piad@@YAXPIAD@Z" +// X64: "\01?foo_piad@@YAXPEIAD@Z" + +void foo_qiad(char * const __restrict x) {} +// CHECK: "\01?foo_qiad@@YAXQIAD@Z" +// X64: "\01?foo_qiad@@YAXQEIAD@Z" + +void foo_riad(char * volatile __restrict x) {} +// CHECK: "\01?foo_riad@@YAXRIAD@Z" +// X64: "\01?foo_riad@@YAXREIAD@Z" + +void foo_siad(char * const volatile __restrict x) {} +// CHECK: "\01?foo_siad@@YAXSIAD@Z" +// X64: "\01?foo_siad@@YAXSEIAD@Z" + void foo_papad(char ** x) {} // CHECK: "\01?foo_papad@@YAXPAPAD@Z" // X64: "\01?foo_papad@@YAXPEAPEAD@Z" @@ -238,3 +254,7 @@ void mangle_yes_backref2(fun_type *const[], ptr_to_fun_type const[]) {} void mangle_yes_backref3(ptr_to_fun_type *const, void (**const)(void)) {} // CHECK: "\01?mangle_yes_backref3@@YAXQAP6AXXZ0@Z" // X64: "\01?mangle_yes_backref3@@YAXQEAP6AXXZ0@Z" + +void mangle_yes_backref4(int *const __restrict, int *const __restrict) {} +// CHECK: "\01?mangle_yes_backref4@@YAXQIAH0@Z" +// X64: "\01?mangle_yes_backref4@@YAXQEIAH0@Z" diff --git a/test/CodeGenCXX/mangle-ms.cpp b/test/CodeGenCXX/mangle-ms.cpp index 2b0457f0d0..7207ad9a52 100644 --- a/test/CodeGenCXX/mangle-ms.cpp +++ b/test/CodeGenCXX/mangle-ms.cpp @@ -99,6 +99,11 @@ extern const int * const h2 = &a; int i[10][20]; // CHECK-DAG: @"\01?i@@3PAY0BE@HA" +typedef int (*FunT)(int, int); +FunT FunArr[10][20]; +// CHECK-DAG: @"\01?FunArr@@3PAY0BE@P6AHHH@ZA" +// X64-DAG: @"\01?FunArr@@3PAY0BE@P6AHHH@ZA" + int (__stdcall *j)(signed char, unsigned char); // CHECK-DAG: @"\01?j@@3P6GHCE@ZA" |