diff options
author | David Majnemer <david.majnemer@gmail.com> | 2013-08-15 08:13:23 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2013-08-15 08:13:23 +0000 |
commit | 6dda7bb08db87e3456502f7e7638b5a98ea74ec0 (patch) | |
tree | 0d080d9cc926f8f7cdd068d25fed07e8f4cfefb2 /clang/test/CodeGenCXX/mangle-ms.cpp | |
parent | 2ffd06528dd27ba3f41be9454c701a7aee0f7424 (diff) | |
download | bcm5719-llvm-6dda7bb08db87e3456502f7e7638b5a98ea74ec0.tar.gz bcm5719-llvm-6dda7bb08db87e3456502f7e7638b5a98ea74ec0.zip |
[-cxx-abi microsoft] Mangle member pointers better
Summary:
There were several things going wrong:
- We mangled in useless qualifiers like "volatile void" return types.
- We didn't propagate 64-bit pointer markers sufficiently.
- We mangled qualifiers belonging to the pointee incorrectly.
This fixes PR16844 and PR16848.
Reviewers: rnk, whunt
Reviewed By: rnk
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1353
llvm-svn: 188450
Diffstat (limited to 'clang/test/CodeGenCXX/mangle-ms.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/mangle-ms.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/clang/test/CodeGenCXX/mangle-ms.cpp b/clang/test/CodeGenCXX/mangle-ms.cpp index 1002d5ddc9e..8f8929919d9 100644 --- a/clang/test/CodeGenCXX/mangle-ms.cpp +++ b/clang/test/CodeGenCXX/mangle-ms.cpp @@ -13,12 +13,27 @@ // CHECK: @"\01?h2@@3QBHB" // CHECK: @"\01?i@@3PAY0BE@HA" // CHECK: @"\01?j@@3P6GHCE@ZA" -// CHECK: @"\01?k@@3PTfoo@@DQ1@" +// X64: @"\01?k@@3PETfoo@@DET1@" // CHECK: @"\01?l@@3P8foo@@AEHH@ZQ1@" // CHECK: @"\01?color1@@3PANA" // CHECK: @"\01?color2@@3QBNB" // CHECK: @"\01?color3@@3QAY02$$CBNA" // CHECK: @"\01?color4@@3QAY02$$CBNA" +// X64: @"\01?memptr1@@3RESB@@HES1@" +// X64: @"\01?memptr2@@3PESB@@HES1@" +// X64: @"\01?memptr3@@3REQB@@HEQ1@" +// X64: @"\01?funmemptr1@@3RESB@@R6AHXZES1@" +// X64: @"\01?funmemptr2@@3PESB@@R6AHXZES1@" +// X64: @"\01?funmemptr3@@3REQB@@P6AHXZEQ1@" +// X64: @"\01?memptrtofun1@@3R8B@@EAAXXZEQ1@" +// X64: @"\01?memptrtofun2@@3P8B@@EAAXXZEQ1@" +// X64: @"\01?memptrtofun3@@3P8B@@EAAXXZEQ1@" +// X64: @"\01?memptrtofun4@@3R8B@@EAAHXZEQ1@" +// X64: @"\01?memptrtofun5@@3P8B@@EAA?CHXZEQ1@" +// X64: @"\01?memptrtofun6@@3P8B@@EAA?BHXZEQ1@" +// X64: @"\01?memptrtofun7@@3R8B@@EAAP6AHXZXZEQ1@" +// X64: @"\01?memptrtofun8@@3P8B@@EAAR6AHXZXZEQ1@" +// X64: @"\01?memptrtofun9@@3P8B@@EAAQ6AHXZXZEQ1@" int a; @@ -180,6 +195,24 @@ extern const RGB color2 = {}; extern RGB const color3[5] = {}; extern RGB const ((color4)[5]) = {}; +struct B; +volatile int B::* volatile memptr1; +volatile int B::* memptr2; +int B::* volatile memptr3; +typedef int (*fun)(); +volatile fun B::* volatile funmemptr1; +volatile fun B::* funmemptr2; +fun B::* volatile funmemptr3; +void (B::* volatile memptrtofun1)(); +const void (B::* memptrtofun2)(); +volatile void (B::* memptrtofun3)(); +int (B::* volatile memptrtofun4)(); +volatile int (B::* memptrtofun5)(); +const int (B::* memptrtofun6)(); +fun (B::* volatile memptrtofun7)(); +volatile fun (B::* memptrtofun8)(); +const fun (B::* memptrtofun9)(); + // PR12603 enum E {}; // CHECK: "\01?fooE@@YA?AW4E@@XZ" |