Author: fjahanian
Date: Tue Nov  1 13:57:34 2011
New Revision: 143475

URL: http://llvm.org/viewvc/llvm-project?rev=143475&view=rev
Log:
Find copy constructor needed to copy an rvalue reference
c++ object into block descriptor. // rdar://9971124

Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/test/CodeGenCXX/block-rvalue-reference-capture.cpp

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=143475&r1=143474&r2=143475&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Nov  1 13:57:34 2011
@@ -1304,7 +1304,10 @@
   // Okay, we descended all the way to the block that defines the variable.
   // Actually try to capture it.
   QualType type = var->getType();
-
+  
+  if (type->isRValueReferenceType())
+    type = type->getPointeeType();
+  
   // Prohibit variably-modified types.
   if (type->isVariablyModifiedType()) {
     S.Diag(loc, diag::err_ref_vm_type);

Modified: cfe/trunk/test/CodeGenCXX/block-rvalue-reference-capture.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/block-rvalue-reference-capture.cpp?rev=143475&r1=143474&r2=143475&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/block-rvalue-reference-capture.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/block-rvalue-reference-capture.cpp Tue Nov  1 
13:57:34 2011
@@ -14,3 +14,18 @@
 // CHECK: [[C:%.*]] = getelementptr inbounds <{ {{.*}} i32 }>* [[B]]
 // CHECK: [[R:%.*]] = load i32* [[C]], align 4
 // CHECK: ret i32 [[R]]
+
+class S {
+public:
+  S (const S &);
+  S(int);
+  int field;
+};
+
+int func(S && rv)
+{ 
+     return ^{ return rv.field; }();
+}
+
+// CHECK: define i32 @_Z4funcO1S
+// CHECK: call void @_ZN1SC1ERKS_


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to