+2012-11-11 Jason Merrill <jason@redhat.com>
+
+ * include/std/complex (real, imag): Add ABI tag in C++11 mode.
+
2012-11-11 Andreas Schwab <schwab@linux-m68k.org>
* doc/xml/chapter.txml: Remove whitespace inside <keyword>.
#if __cplusplus >= 201103L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr _Tp
real() { return _M_real; }
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr _Tp
imag() { return _M_imag; }
#else
#if __cplusplus >= 201103L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr float
real() { return __real__ _M_value; }
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr float
imag() { return __imag__ _M_value; }
#else
#if __cplusplus >= 201103L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr double
real() { return __real__ _M_value; }
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr double
imag() { return __imag__ _M_value; }
#else
#if __cplusplus >= 201103L
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr long double
real() { return __real__ _M_value; }
+ __attribute ((__abi_tag__ ("cxx11")))
constexpr long double
imag() { return __imag__ _M_value; }
#else
--- /dev/null
+// Test that the C++11 variants of real/imag have an ABI tag
+// { dg-do compile }
+// { dg-options -std=c++11 }
+
+#include <complex>
+
+// { dg-final { scan-assembler "_ZNKSt7complexIfE4realB5cxx11Ev" } }
+float (std::complex<float>::*p1)() const = &std::complex<float>::real;
+// { dg-final { scan-assembler "_ZNKSt7complexIdE4realB5cxx11Ev" } }
+double (std::complex<double>::*p2)() const = &std::complex<double>::real;
+// { dg-final { scan-assembler "_ZNKSt7complexIeE4realB5cxx11Ev" } }
+long double (std::complex<long double>::*p3)() const
+ = &std::complex<long double>::real;
+// { dg-final { scan-assembler "_ZNKSt7complexIiE4realB5cxx11Ev" } }
+int (std::complex<int>::*p4)() const = &std::complex<int>::real;
+
+// { dg-final { scan-assembler "_ZNKSt7complexIfE4imagB5cxx11Ev" } }
+float (std::complex<float>::*p5)() const = &std::complex<float>::imag;
+// { dg-final { scan-assembler "_ZNKSt7complexIdE4imagB5cxx11Ev" } }
+double (std::complex<double>::*p6)() const = &std::complex<double>::imag;
+// { dg-final { scan-assembler "_ZNKSt7complexIeE4imagB5cxx11Ev" } }
+long double (std::complex<long double>::*p7)() const
+ = &std::complex<long double>::imag;
+// { dg-final { scan-assembler "_ZNKSt7complexIiE4imagB5cxx11Ev" } }
+int (std::complex<int>::*p8)() const = &std::complex<int>::imag;