Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/g++.dg/conversion/qual3.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/g++.dg/conversion/qual3.C Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,53 @@ +// PR c++/88128 - DR 330: Qual convs and pointers to arrays of pointers. +// { dg-do compile { target c++17 } } + +using P = int *(*)[3]; +using Q = const int *const (*)[3]; +using Qi = const int *[3]; +using Q2 = Qi const *; +using R = const int *const (*)[4]; +using S = const int *const (*)[]; +using T = const int *(*)[]; + +void +f (P p, Q q, Q2 q2, R r, S s, T t) +{ + q = p; + q2 = p; + r = p; // { dg-error "cannot convert" } + t = p; // { dg-error "cannot convert" } + s = t; + t = s; // { dg-error "invalid conversion" } + + // Test const_cast. + const_cast<P>(q); + const_cast<P>(q2); + const_cast<Q>(p); + const_cast<Q2>(p); + const_cast<S>(p); // { dg-error "3:invalid .const_cast." } + const_cast<P>(s); // { dg-error "3:invalid .const_cast." } + const_cast<S>(q); // { dg-error "3:invalid .const_cast." } + const_cast<S>(q2); // { dg-error "3:invalid .const_cast." } + const_cast<Q>(s); // { dg-error "3:invalid .const_cast." } + const_cast<Q2>(s); // { dg-error "3:invalid .const_cast." } + const_cast<T>(s); + const_cast<S>(t); + const_cast<T>(q); // { dg-error "3:invalid .const_cast." } + const_cast<Q>(t); // { dg-error "3:invalid .const_cast." } + + // Test reinterpret_cast. + reinterpret_cast<P>(q); // { dg-error "3:.reinterpret_cast. \[^\n\r]* casts away qualifiers" } + reinterpret_cast<P>(q2); // { dg-error "3:.reinterpret_cast. \[^\n\r]* casts away qualifiers" } + reinterpret_cast<Q>(p); + reinterpret_cast<Q2>(p); + reinterpret_cast<S>(p); + reinterpret_cast<P>(s); // { dg-error "3:.reinterpret_cast. \[^\n\r]* casts away qualifiers" } + reinterpret_cast<S>(q); + reinterpret_cast<S>(q2); + reinterpret_cast<Q>(s); + reinterpret_cast<Q2>(s); + reinterpret_cast<T>(s); // { dg-error "3:.reinterpret_cast. \[^\n\r]* casts away qualifiers" } + reinterpret_cast<S>(t); + reinterpret_cast<T>(q); // { dg-error "3:.reinterpret_cast. \[^\n\r]* casts away qualifiers" } + reinterpret_cast<Q>(t); +}