Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/torture/pr69553.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run } template <typename _Tp, long _Nm> struct A { typedef _Tp _Type[_Nm]; static _Tp &_S_ref(const _Type &p1, int p2) { return const_cast<_Tp &>(p1[p2]); } }; template <typename _Tp, long _Nm> struct B { typedef A<_Tp, _Nm> _AT_Type; typename _AT_Type::_Type _M_elems; _Tp &operator[](long p1) const { return _AT_Type::_S_ref(_M_elems, p1); } }; int t; void foo(int p1, int &p2) { if ((t & 1) == 0) { if (p1 != 1) __builtin_abort(); if (p2 != 2) __builtin_abort(); } t++; } __attribute__((noinline)) void test1(const B<int, 2> &p1) { foo(p1[0], p1[1]); } void test(B<B<int, 2>, 2> &p1) { test1(p1[0]); test1(p1[1]); foo(p1[0][0], p1[0][1]); } int main() { B<B<int, 2>, 2> t; t[0][0] = 1; t[0][1] = 2; test(t); }