From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10445 invoked by alias); 7 Sep 2018 18:46:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 10425 invoked by uid 89); 7 Sep 2018 18:46:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=nontrivial, non-trivial, array-init.c, UD:array-init.c X-HELO: mx1.redhat.com Received: from mx3-rdu2.redhat.com (HELO mx1.redhat.com) (66.187.233.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 07 Sep 2018 18:46:28 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D17CD407519F for ; Fri, 7 Sep 2018 18:46:26 +0000 (UTC) Received: from redhat.com (ovpn-121-46.rdu2.redhat.com [10.10.121.46]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 942A5108496; Fri, 7 Sep 2018 18:46:26 +0000 (UTC) Date: Fri, 07 Sep 2018 18:46:00 -0000 From: Marek Polacek To: GCC Patches , Jason Merrill Subject: C++ PATCH to fix more FAILs in c++17/c++2a Message-ID: <20180907184625.GZ12638@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-SW-Source: 2018-09/txt/msg00444.txt.bz2 Running make check-c++-all I noticed some more failures, mostly caused by me. Tested on x86_64-linux, ok for trunk? 2018-09-07 Marek Polacek * c-c++-common/array-init.c: Add dg-error. * g++.dg/cpp0x/lambda/lambda-const-this.C: Add dg-warning. * g++.dg/cpp0x/lambda/lambda-in-class-neg.C: Likewise. * g++.dg/cpp0x/lambda/lambda-in-class.C: Likewise. * g++.dg/cpp0x/lambda/lambda-nested.C: Likewise. * g++.dg/cpp0x/lambda/lambda-nsdmi1.C: Likewise. * g++.dg/cpp0x/lambda/lambda-nsdmi4.C: Likewise. * g++.dg/cpp0x/lambda/lambda-this.C: Likewise. * g++.dg/cpp0x/lambda/lambda-this17.C: Likewise. * g++.dg/cpp0x/lambda/lambda-this18.C: Likewise. * g++.dg/cpp0x/lambda/lambda-this2.C: Likewise. * g++.dg/cpp0x/lambda/lambda-this8.C: Likewise. * g++.dg/cpp1y/pr64382.C: Likewise. * g++.dg/cpp1y/pr77739.C: Likewise. * g++.dg/cpp1z/lambda-this1.C: Likewise. * g++.dg/cpp1z/lambda-this2.C: Likewise. * g++.dg/template/crash84.C: Adjust dg-error. diff --git gcc/testsuite/c-c++-common/array-init.c gcc/testsuite/c-c++-common/array-init.c index 0624e708987..2562ec9928e 100644 --- gcc/testsuite/c-c++-common/array-init.c +++ gcc/testsuite/c-c++-common/array-init.c @@ -2,3 +2,4 @@ /* { dg-prune-output "sorry, unimplemented: non-trivial designated initializers not supported" } */ char x[] = { [-1] = 1, 2, 3 }; /* { dg-error "array index in initializer exceeds array bounds" "" { target c } } */ +// { dg-error "all initializer clauses should be designated" "" { target c++2a } .-1 } diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-this.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-this.C index 220ac911cdb..f51055d6e7d 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-this.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const-this.C @@ -5,5 +5,6 @@ struct S { void f(); void g() const { [=] { f(); } (); // { dg-error "no match|qualifiers" } +// { dg-warning "implicit capture" "" { target c++2a } .-1 } } }; diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C index 92a165d95bb..cff3d375682 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class-neg.C @@ -18,8 +18,9 @@ class C { [&] () -> void { this->m_i = 3; } (); assert(m_i == 3); [=] () -> void { m_i = 4; } (); // copies 'this' or --copies-m_i--? +// { dg-warning "implicit capture" "" { target c++2a } .-1 } assert(m_i == 4); - [=] () -> void { this->m_i = 5; } (); + [=] () -> void { this->m_i = 5; } (); // { dg-warning "implicit capture" "" { target c++2a } } assert(m_i == 5); } diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C index 92981109fd8..f2b54e58ad3 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-in-class.C @@ -18,8 +18,9 @@ class C { [&] () -> void { this->m_i = 3; } (); assert(m_i == 3); [=] () -> void { m_i = 4; } (); // copies 'this' or --copies-m_i--? +// { dg-warning "implicit capture" "" { target c++2a } .-1 } assert(m_i == 4); - [=] () -> void { this->m_i = 5; } (); + [=] () -> void { this->m_i = 5; } (); // { dg-warning "implicit capture" "" { target c++2a } } assert(m_i == 5); } diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C index c8ea46a980f..3848938d55f 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested.C @@ -7,7 +7,7 @@ struct A { A(): i(42) { } int f() { return [this]{ - return [=]{ return i; }(); + return [=]{ return i; }(); // { dg-warning "implicit capture" "" { target c++2a } } }(); } }; diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C index 94dc254fd7c..b6972896ecb 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi1.C @@ -1,7 +1,7 @@ // PR c++/56464 // { dg-do run { target c++11 } } -struct bug { bug*a = [&]{ return [=]{return this;}(); }(); }; +struct bug { bug*a = [&]{ return [=]{return this;}(); }(); }; // { dg-warning "implicit capture" "" { target c++2a } } int main() { bug b; diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C index b592f155063..127bd26b953 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi4.C @@ -10,5 +10,5 @@ struct function struct testee { function l1 = []() { }; - function l2 = [=]() { l1; }; + function l2 = [=]() { l1; }; // { dg-warning "implicit capture" "" { target c++2a } } }; diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C index b32f8d7cc28..7a27cf44a68 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this.C @@ -6,8 +6,9 @@ struct A int i; void f() { - [=] { i = 0; }; + [=] { i = 0; }; // { dg-warning "implicit capture" "" { target c++2a } } [&] { i = 0; }; [=] { this = 0; }; // { dg-error "lvalue" } +// { dg-warning "implicit capture" "" { target c++2a } .-1 } } }; diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C index 2386e6b1eb8..b7cdf31c46b 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this17.C @@ -7,7 +7,7 @@ struct Test { struct TestPickled : Test { template void triggerTest (Args&&... fargs) { - [=](Args... as) { + [=](Args... as) { // { dg-warning "implicit capture" "" { target c++2a } } Test::triggerTest (as...); } (); } diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C index fec2da615b6..3cfd3c0f252 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C @@ -18,7 +18,7 @@ template void A::bar () { - auto f = [this] () { auto g = [=] () { a.foo (); }; g (); }; + auto f = [this] () { auto g = [=] () { a.foo (); }; g (); }; // { dg-warning "implicit capture" "" { target c++2a } } f (); } diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C index 5029a4a7638..56d6b0c8ab9 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this2.C @@ -7,7 +7,7 @@ struct S1 { int i; void g(); void f() { - [=]() { + [=]() { // { dg-warning "implicit capture" "" { target c++2a } } i; g(); S1::g(); diff --git gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C index d7c5d2c051d..e62cd08a614 100644 --- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C +++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this8.C @@ -6,21 +6,21 @@ struct test { template std::function broken(int x) { - return [=] { +x; print(); }; + return [=] { +x; print(); }; // { dg-warning "implicit capture" "" { target c++2a } } } std::function works0() { - return [=] { print(); }; + return [=] { print(); }; // { dg-warning "implicit capture" "" { target c++2a } } } template std::function works1() { - return [=] { print(); }; + return [=] { print(); }; // { dg-warning "implicit capture" "" { target c++2a } } } template std::function works2() { - return [=] { this->print(); }; + return [=] { this->print(); }; // { dg-warning "implicit capture" "" { target c++2a } } } template diff --git gcc/testsuite/g++.dg/cpp1y/pr64382.C gcc/testsuite/g++.dg/cpp1y/pr64382.C index 8f2e931e048..0342dee7e98 100644 --- gcc/testsuite/g++.dg/cpp1y/pr64382.C +++ gcc/testsuite/g++.dg/cpp1y/pr64382.C @@ -9,7 +9,7 @@ struct my_queue } void ice() { - auto L = [=](auto &&v) { + auto L = [=](auto &&v) { // { dg-warning "implicit capture" "" { target c++2a } } push(v); }; trav(L); diff --git gcc/testsuite/g++.dg/cpp1y/pr77739.C gcc/testsuite/g++.dg/cpp1y/pr77739.C index 96183305a7d..8fe76f99f56 100644 --- gcc/testsuite/g++.dg/cpp1y/pr77739.C +++ gcc/testsuite/g++.dg/cpp1y/pr77739.C @@ -8,7 +8,7 @@ struct A { struct B { B(); template auto g(Args &&... p1) { - return [=] { f(p1...); }; + return [=] { f(p1...); }; // { dg-warning "implicit capture" "" { target c++2a } } } void f(A, const char *); }; diff --git gcc/testsuite/g++.dg/cpp1z/lambda-this1.C gcc/testsuite/g++.dg/cpp1z/lambda-this1.C index 2c49dd9bf73..b13ff8b9fc6 100644 --- gcc/testsuite/g++.dg/cpp1z/lambda-this1.C +++ gcc/testsuite/g++.dg/cpp1z/lambda-this1.C @@ -15,7 +15,7 @@ struct A { auto g = [*this] { a++; }; // { dg-error "in read-only object" } // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 } auto h = [*this] () mutable { a++; };// { dg-error "'*this' capture only available with" "" { target c++14_down } } - auto i = [=] { return a; }; + auto i = [=] { return a; }; // { dg-warning "implicit capture" "" { target c++2a } } auto j = [&] { return a; }; // P0409R2 - C++2A lambda capture [=, this] auto k = [=, this] { return a; };// { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } } @@ -62,7 +62,7 @@ struct C { auto d = [this] { return c; }; auto e = [*this] { return c; }; // { dg-error "use of deleted function" } // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 } - auto f = [=] { return c; }; + auto f = [=] { return c; }; // { dg-warning "implicit capture" "" { target c++2a } } auto g = [&] { return c; }; auto h = [this] { bar (); }; auto i = [*this] { bar (); }; // { dg-error "use of deleted function" } @@ -77,7 +77,7 @@ struct D { auto e = [this] { return d; }; auto f = [*this] { return d; }; // { dg-error "use of deleted function" } // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 } - auto g = [=] { return d; }; + auto g = [=] { return d; }; // { dg-warning "implicit capture" "" { target c++2a } } auto h = [&] { return d; }; auto i = [this] { bar (); }; auto j = [*this] { bar (); }; // { dg-error "use of deleted function" } diff --git gcc/testsuite/g++.dg/cpp1z/lambda-this2.C gcc/testsuite/g++.dg/cpp1z/lambda-this2.C index 5a0066d750b..f3ef8e36313 100644 --- gcc/testsuite/g++.dg/cpp1z/lambda-this2.C +++ gcc/testsuite/g++.dg/cpp1z/lambda-this2.C @@ -12,7 +12,7 @@ struct A { if (z != 0) abort (); auto b = [this] { return &a; }; auto c = [*this] { return &a; }; // { dg-warning "'*this' capture only available with" "" { target c++14_down } } - auto d = [=] { return &a; }; + auto d = [=] { return &a; }; // { dg-warning "implicit capture" "" { target c++2a } } auto e = [&] { return &a; }; if (b () != &a) abort (); if (*b () != 4) abort (); @@ -24,7 +24,7 @@ struct A { if (e () != &a) abort (); auto g = [this] { return a + z; }; auto h = [*this] { return a + z; }; // { dg-warning "'*this' capture only available with" "" { target c++14_down } } - auto i = [=] { return a + z; }; + auto i = [=] { return a + z; }; // { dg-warning "implicit capture" "" { target c++2a } } auto j = [&] { return a + z; }; if (g () != 4 || h () != 5 || i () != 4 || j () != 4) abort (); } @@ -39,7 +39,7 @@ struct B { if (z != 0) abort (); auto b = [this] { return &a; }; auto c = [*this] { return &a; }; // { dg-warning "'*this' capture only available with" "" { target c++14_down } } - auto d = [=] { return &a; }; + auto d = [=] { return &a; }; // { dg-warning "implicit capture" "" { target c++2a } } auto e = [&] { return &a; }; if (b () != &a) abort (); if (*b () != 9) abort (); @@ -51,7 +51,7 @@ struct B { if (e () != &a) abort (); auto g = [this] { return a + z; }; auto h = [*this] { return a + z; }; // { dg-warning "'*this' capture only available with" "" { target c++14_down } } - auto i = [=] { return a + z; }; + auto i = [=] { return a + z; }; // { dg-warning "implicit capture" "" { target c++2a } } auto j = [&] { return a + z; }; if (g () != 9 || h () != 10 || i () != 9 || j () != 9) abort (); } diff --git gcc/testsuite/g++.dg/template/crash84.C gcc/testsuite/g++.dg/template/crash84.C index b3099d931c2..f90cf5c18d4 100644 --- gcc/testsuite/g++.dg/template/crash84.C +++ gcc/testsuite/g++.dg/template/crash84.C @@ -14,7 +14,7 @@ void foo () { a a1; // OK - a::b b1; // { dg-error "template argument|converted constant" } + a::b b1; // { dg-error "template argument|convert" } } // { dg-prune-output "invalid type in declaration" }