From abfe01cec91fae69bb05700bf6a53f41a64fd15c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 3 Feb 2010 15:42:35 -0500 Subject: re PR c++/12909 (ambiguity in mangling vector types) PR c++/12909 * mangle.c (write_type) [VECTOR_TYPE]: Change mangling. From-SVN: r156481 --- gcc/common.opt | 8 +++++++- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/mangle.c | 11 ++++++++++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/abi/mangle36.C | 9 +++++++++ 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/abi/mangle36.C (limited to 'gcc') diff --git a/gcc/common.opt b/gcc/common.opt index 6e369e5..a4358b5 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -266,7 +266,13 @@ Common Separate ; ; 1: The version of the ABI first used in G++ 3.2. ; -; 2: The version of the ABI first used in G++ 3.4. +; 2: The version of the ABI first used in G++ 3.4 (and current default). +; +; 3: The version of the ABI that fixes the missing underscore +; in template non-type arguments of pointer type. +; +; 4: The version of the ABI that introduces unambiguous mangling of +; vector types. ; ; Additional positive integers will be assigned as new versions of ; the ABI become the default version of the ABI. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b122aec..c3b1bdc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-02-03 Jason Merrill + + PR c++/12909 + * mangle.c (write_type) [VECTOR_TYPE]: Change mangling with + -fabi-version=4. + 2010-02-02 Jason Merrill PR c++/41090 diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index c14f5b7..37293f1 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1850,7 +1850,16 @@ write_type (tree type) break; case VECTOR_TYPE: - write_string ("U8__vector"); + if (abi_version_at_least (4)) + { + write_string ("Dv"); + /* Non-constant vector size would be encoded with + _ expression, but we don't support that yet. */ + write_unsigned_number (TYPE_VECTOR_SUBPARTS (type)); + write_char ('_'); + } + else + write_string ("U8__vector"); write_type (TREE_TYPE (type)); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2244bb8..0c849b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-02-03 Jason Merrill + PR c++/12909 + * g++.dg/abi/mangle36.C: New. + PR c++/35652 * g++.dg/warn/string1.C: New. diff --git a/gcc/testsuite/g++.dg/abi/mangle36.C b/gcc/testsuite/g++.dg/abi/mangle36.C new file mode 100644 index 0000000..aaace65 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle36.C @@ -0,0 +1,9 @@ +// PR c++/41959 +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-mavx -fabi-version=4" } +// { dg-final { scan-assembler "_Z1fDv4_f" } } +// { dg-final { scan-assembler "_Z1fDv8_f" } } + +#include +void f(__m128) { } +void f(__m256) { } -- cgit v1.1