aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-10 16:48:25 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-10 16:48:25 -0500
commit7a79ff3be3d08ef53b5b6ca9a0adb7fc84ebdb19 (patch)
treeafe62bd4ccd3088cc7038615858d06b65328c19a
parent56592e03b487f3c20ef54bbd97766d207f77b31d (diff)
downloadgcc-7a79ff3be3d08ef53b5b6ca9a0adb7fc84ebdb19.zip
gcc-7a79ff3be3d08ef53b5b6ca9a0adb7fc84ebdb19.tar.gz
gcc-7a79ff3be3d08ef53b5b6ca9a0adb7fc84ebdb19.tar.bz2
re PR c++/43016 ([C++0x] Inappropriate multiple definition error for lambda function when inside inline functions)
PR c++/43016 * semantics.c (maybe_add_lambda_conv_op): Set DECL_INTERFACE_KNOWN. From-SVN: r156671
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C12
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6bd2eca..fd637fb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/43016
+ * semantics.c (maybe_add_lambda_conv_op): Set DECL_INTERFACE_KNOWN.
+
2010-02-10 Shujing Zhao <pearly.zhao@oracle.com>
* Make-lang.in (cp/cvt.o, cp/parser.o, cp/search.o): Depend on intl.h.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 39085be..f8ced6f 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5871,6 +5871,8 @@ maybe_add_lambda_conv_op (tree type)
DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_DECLARED_INLINE_P (fn) = 1;
DECL_STATIC_FUNCTION_P (fn) = 1;
+ if (nested)
+ DECL_INTERFACE_KNOWN (fn) = 1;
add_method (type, fn, NULL_TREE);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d599f15..c63c1ff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/43016
+ * g++.dg/cpp0x/lambda/lambda-conv.C: Test for weakness.
+
2010-02-10 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43017
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
index e308248..fd7e401 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C
@@ -1,6 +1,16 @@
+// Test for conversion from stateless lambda to function pointer, which is
+// not yet part of the draft but hopefully will be after the March 2010
+// meeting.
+
// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZ1fvENUlvE_cvPFvvEEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
-int main()
+inline void f()
{
void (*pfn)() = []{};
}
+
+int main()
+{
+ f();
+}