Author: Yuanfang Chen Date: 2022-10-17T23:24:29-07:00 New Revision: 4e2a629c7238008de0ab45e6bb96aeaecac2bca9
URL: https://github.com/llvm/llvm-project/commit/4e2a629c7238008de0ab45e6bb96aeaecac2bca9 DIFF: https://github.com/llvm/llvm-project/commit/4e2a629c7238008de0ab45e6bb96aeaecac2bca9.diff LOG: [Clang] add DR tests for D128745 Added: Modified: clang/test/CXX/drs/dr13xx.cpp clang/test/CXX/drs/dr14xx.cpp clang/test/CXX/drs/dr6xx.cpp Removed: ################################################################################ diff --git a/clang/test/CXX/drs/dr13xx.cpp b/clang/test/CXX/drs/dr13xx.cpp index dc116f75b1aed..1a792f838e87c 100644 --- a/clang/test/CXX/drs/dr13xx.cpp +++ b/clang/test/CXX/drs/dr13xx.cpp @@ -457,6 +457,17 @@ Incomplete f(Incomplete) = delete; // well-formed #endif } +namespace dr1395 { // dr1395: 16 +#if __cplusplus >= 201103L + template <typename T, typename... U> void f(T, U...); + template <typename T> void f(T); + void h(int i) { + // This is made ambiguous by dr692, but made valid again by dr1395. + f(&i); + } +#endif +} + namespace dr1399 { // dr1399: dup 1388 template<typename ...T> void f(T..., int, T...) {} // expected-note {{candidate}} expected-error 0-1{{C++11}} void g() { diff --git a/clang/test/CXX/drs/dr14xx.cpp b/clang/test/CXX/drs/dr14xx.cpp index 526211c0e0062..7d27d3b542443 100644 --- a/clang/test/CXX/drs/dr14xx.cpp +++ b/clang/test/CXX/drs/dr14xx.cpp @@ -36,6 +36,27 @@ namespace dr1423 { // dr1423: 11 #endif } +namespace dr1432 { // dr1432: 16 +#if __cplusplus >= 201103L + template<typename T> T declval(); + + template <class... T> + struct common_type; + + template <class T, class U> + struct common_type<T, U> { + typedef decltype(true ? declval<T>() : declval<U>()) type; + }; + + template <class T, class U, class... V> + struct common_type<T, U, V...> { + typedef typename common_type<typename common_type<T, U>::type, V...>::type type; + }; + + template struct common_type<int, double>; +#endif +} + namespace dr1443 { // dr1443: yes struct A { int i; diff --git a/clang/test/CXX/drs/dr6xx.cpp b/clang/test/CXX/drs/dr6xx.cpp index 527379590bd39..494d857e829ae 100644 --- a/clang/test/CXX/drs/dr6xx.cpp +++ b/clang/test/CXX/drs/dr6xx.cpp @@ -1079,16 +1079,16 @@ namespace dr687 { // dr687 (9 c++20, but the issue is still considered open) } } -namespace dr692 { // dr692: no +namespace dr692 { // dr692: 16 // Also see dr1395. namespace temp_func_order_example2 { template <typename... T> struct A1 {}; // expected-error 0-1{{C++11}} template <typename U, typename... T> struct A2 {}; // expected-error 0-1{{C++11}} - template <class T1, class... U> void e1(A1<T1, U...>) = delete; // expected-error 0-2{{C++11}} - template <class T1> void e1(A1<T1>); - template <class T1, class... U> void e2(A2<T1, U...>) = delete; // expected-error 0-2{{C++11}} - template <class T1> void e2(A2<T1>); + template <typename T1, typename... U> void e1(A1<T1, U...>) = delete; // expected-error 0-2{{C++11}} + template <typename T1> void e1(A1<T1>); + template <typename T1, typename... U> void e2(A2<T1, U...>) = delete; // expected-error 0-2{{C++11}} + template <typename T1> void e2(A2<T1>); template <typename T, typename U> void f(U, A1<U, T> *p = 0) = delete; // expected-note {{candidate}} expected-error 0-1{{C++11}} template <typename U> int &f(U, A1<U, U> *p = 0); // expected-note {{candidate}} template <typename T> void g(T, T = T()); // expected-note {{candidate}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits