Bug 55223 - [C++11] Default lambda expression of a templated class member
Summary: [C++11] Default lambda expression of a templated class member
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.7.2
: P3 normal
Target Milestone: 4.8.0
Assignee: Not yet assigned to anyone
URL:
Keywords: c++-lambda, ice-on-valid-code
: 51833 53486 (view as bug list)
Depends on:
Blocks: lambdas
  Show dependency treegraph
 
Reported: 2012-11-06 19:23 UTC by Vincent Reverdy
Modified: 2022-03-11 00:32 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-11-06 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vincent Reverdy 2012-11-06 19:23:38 UTC
The following example returns a compiler error "internal compiler error : in tsubst_copy, at cp/pt.c:11354". It occurs when the default std::function of a templated class member is used :

//-----------------------------------------------------------
#include <iostream>
#include <functional>

template<typename T> struct C
{
    static T test(std::function<T(int)> f = [](int i){return i;})
    {return f(42);}
};

int main(int argc, char* argv[])
{
    C<int>::test(); // ERROR = internal compiler error : in tsubst_copy, at cp/pt.c:11354
    C<int>::test([](int i){return i;}); // OK
    return 0;
}
//-----------------------------------------------------------

Tested on GCC 4.6.3 and 4.7.2.
Comment 1 Jonathan Wakely 2012-11-06 19:37:27 UTC
crashes in the same place as Bug 53486, but I think that's ice-on-invalid-code and has a huge testcase, so let's keep this open
Comment 2 ak 2013-01-20 19:03:29 UTC
Author: ak
Date: Sun Jan 20 19:03:22 2013
New Revision: 195321

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=195321
Log:
libstdc++: Add mem_order_hle_acquire/release to atomic.h v2

The underlying compiler supports additional __ATOMIC_HLE_ACQUIRE/RELEASE
memmodel flags for TSX, but this was not exposed to the C++ wrapper.
Handle it there.

These are additional flags, so some of assert checks need to mask
off the flags before checking the memory model type.

libstdc++-v3/:
2013-01-12  Andi Kleen  <ak@linux.intel.com>
	    Jonathan Wakely  <jwakely.gcc@gmail.com>

        PR libstdc++/55223
	* include/bits/atomic_base.h (__memory_order_modifier): Add
	__memory_order_mask, __memory_order_modifier_mask,
	__memory_order_hle_acquire, __memory_order_hle_release.
	(operator|,operator&): Add.
	(__cmpexch_failure_order):  Rename to __cmpexch_failure_order2.
	(__cmpexch_failure_order): Add.
	(clear, store, load, compare_exchange_weak, compare_exchange_strong):
	Handle flags.
	* testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc:
	Add.

Added:
    trunk/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc
Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/bits/atomic_base.h
Comment 3 Daniel Krügler 2013-01-20 19:56:22 UTC
(In reply to comment #2)
> The underlying compiler supports additional __ATOMIC_HLE_ACQUIRE/RELEASE
> memmodel flags for TSX, but this was not exposed to the C++ wrapper.
> Handle it there.

I'm confused: This comment seems not to match to the issue problem. Could it be that it should refer to another issue?
Comment 4 Jonathan Wakely 2013-01-20 20:04:30 UTC
Typo in the commit, it should be PR 55233
Comment 5 Jason Merrill 2013-02-15 01:26:49 UTC
Author: jason
Date: Fri Feb 15 01:26:44 2013
New Revision: 196065

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=196065
Log:
	PR c++/55223
gcc/cp/
	* pt.c (tsubst_copy_and_build) [LAMBDA_EXPR]: Fix handling of
	default argument scope.
	* mangle.c (write_name): Likewise.
libiberty/
	* cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_DEFAULT_ARG.
	(d_print_comp): Likewise.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg3.C
Modified:
    trunk/gcc/common.opt
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/mangle.c
    trunk/gcc/cp/pt.c
    trunk/libiberty/ChangeLog
    trunk/libiberty/cp-demangle.c
    trunk/libiberty/testsuite/demangle-expected
Comment 6 Paolo Carlini 2013-02-15 11:19:09 UTC
Fixed.
Comment 7 Paolo Carlini 2013-02-15 11:47:06 UTC
*** Bug 51833 has been marked as a duplicate of this bug. ***
Comment 8 Paolo Carlini 2013-02-15 12:05:03 UTC
*** Bug 53486 has been marked as a duplicate of this bug. ***