diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-08-12 17:53:10 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-08-12 17:53:10 +0000 |
commit | 2f6a96e1b65667f2577fd1e15c2ea2fd496bb8f5 (patch) | |
tree | 9ab7a61555f13395268ddf95a0af21c19802854e /clang/test/CodeGenCXX/mangle-ms-cxx11.cpp | |
parent | 4714826262ae77dec341eefa9887d0b930fce0ad (diff) | |
download | bcm5719-llvm-2f6a96e1b65667f2577fd1e15c2ea2fd496bb8f5.tar.gz bcm5719-llvm-2f6a96e1b65667f2577fd1e15c2ea2fd496bb8f5.zip |
MS ABI: Mangle this qualifiers on function types
C++11 allows this qualifiers to exist on function types when used in
template arguments. Previously, I believed it wasn't possible because
MSVC rejected declarations like: S<int () const &> s;
However, it turns out MSVC properly allows them in using declarations;
updated clang to be compatible with this mangling.
llvm-svn: 215464
Diffstat (limited to 'clang/test/CodeGenCXX/mangle-ms-cxx11.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/mangle-ms-cxx11.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/mangle-ms-cxx11.cpp b/clang/test/CodeGenCXX/mangle-ms-cxx11.cpp index 1b892864c65..ff1692d0195 100644 --- a/clang/test/CodeGenCXX/mangle-ms-cxx11.cpp +++ b/clang/test/CodeGenCXX/mangle-ms-cxx11.cpp @@ -1,5 +1,58 @@ // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s +namespace FTypeWithQuals { +template <typename T> +struct S {}; + +using A = int () const; +S<A> a; +// CHECK-DAG: @"\01?a@FTypeWithQuals@@3U?$S@$$A8@@BAHXZ@1@A" + +using B = int () volatile; +S<B> b; +// CHECK-DAG: @"\01?b@FTypeWithQuals@@3U?$S@$$A8@@CAHXZ@1@A" + +using C = int () __restrict; +S<C> c; +// CHECK-DAG: @"\01?c@FTypeWithQuals@@3U?$S@$$A8@@IAAHXZ@1@A" + +using D = int () const &; +S<D> d; +// CHECK-DAG: @"\01?d@FTypeWithQuals@@3U?$S@$$A8@@GBAHXZ@1@A" + +using E = int () volatile &; +S<E> e; +// CHECK-DAG: @"\01?e@FTypeWithQuals@@3U?$S@$$A8@@GCAHXZ@1@A" + +using F = int () __restrict &; +S<F> f; +// CHECK-DAG: @"\01?f@FTypeWithQuals@@3U?$S@$$A8@@IGAAHXZ@1@A" + +using G = int () const &&; +S<G> g; +// CHECK-DAG: @"\01?g@FTypeWithQuals@@3U?$S@$$A8@@HBAHXZ@1@A" + +using H = int () volatile &&; +S<H> h; +// CHECK-DAG: @"\01?h@FTypeWithQuals@@3U?$S@$$A8@@HCAHXZ@1@A" + +using I = int () __restrict &&; +S<I> i; +// CHECK-DAG: @"\01?i@FTypeWithQuals@@3U?$S@$$A8@@IHAAHXZ@1@A" + +using J = int (); +S<J> j; +// CHECK-DAG: @"\01?j@FTypeWithQuals@@3U?$S@$$A6AHXZ@1@A" + +using K = int () &; +S<K> k; +// CHECK-DAG: @"\01?k@FTypeWithQuals@@3U?$S@$$A8@@GAAHXZ@1@A" + +using L = int () &&; +S<L> l; +// CHECK-DAG: @"\01?l@FTypeWithQuals@@3U?$S@$$A8@@HAAHXZ@1@A" +} + // CHECK: "\01?DeducedType@@3HA" auto DeducedType = 30; |