]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/43016 ([C++0x] Inappropriate multiple definition error for lambda function...
authorJason Merrill <jason@redhat.com>
Wed, 10 Feb 2010 21:48:25 +0000 (16:48 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 10 Feb 2010 21:48:25 +0000 (16:48 -0500)
PR c++/43016
* semantics.c (maybe_add_lambda_conv_op): Set DECL_INTERFACE_KNOWN.

From-SVN: r156671

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv.C

index 6bd2eca6d5682f697d16dc79ad52a2b92f9e9858..fd637fbba1047982a0268b2adab235e114a214c9 100644 (file)
@@ -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.
index 39085be19d41ae1ddb6021d8ef7f2e3582369e1a..f8ced6fd5493356aa912cd34f6debe4fb7809eb1 100644 (file)
@@ -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);
 
index d599f15a07cc38a8084baa8f0f2d59a00294124e..c63c1ff73807c33f65cf9a6ae91d17d3977c614a 100644 (file)
@@ -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
index e308248b657d8740b8ff6b6bda88cdfcf6af303f..fd7e40193505df99ef62f3ef3a74ad9b24da7710 100644 (file)
@@ -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();
+}