[cfe-commits] r138784 - /cfe/trunk/lib/Sema/SemaExpr.cpp

John McCall rjmccall at apple.com
Mon Aug 29 16:55:38 PDT 2011


Author: rjmccall
Date: Mon Aug 29 18:55:37 2011
New Revision: 138784

URL: http://llvm.org/viewvc/llvm-project?rev=138784&view=rev
Log:
Update the comment on the default-argument conversion fix;  thanks to
Johannes Schaub for talking me around to sense.


Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=138784&r1=138783&r2=138784&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Aug 29 18:55:37 2011
@@ -444,12 +444,16 @@
     E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).take();
 
   // C++ performs lvalue-to-rvalue conversion as a default argument
-  // promotion.  If we still have a gl-value after usual unary
-  // conversion, we must have an l-value of class type, so we need to
-  // initialize a temporary.  For compatibility reasons, however, we
-  // don't want to do this in unevaluated contexts; otherwise we
-  // reject metaprograms which work by passing uncopyable l-values to
-  // variadic functions.
+  // promotion, even on class types, but note:
+  //   C++11 [conv.lval]p2:
+  //     When an lvalue-to-rvalue conversion occurs in an unevaluated
+  //     operand or a subexpression thereof the value contained in the
+  //     referenced object is not accessed. Otherwise, if the glvalue
+  //     has a class type, the conversion copy-initializes a temporary
+  //     of type T from the glvalue and the result of the conversion
+  //     is a prvalue for the temporary.
+  // FIXME: add some way to gate this entire thing for correctness in
+  // potentially potentially evaluated contexts.
   if (getLangOptions().CPlusPlus && E->isGLValue() && 
       ExprEvalContexts.back().Context != Unevaluated) {
     ExprResult Temp = PerformCopyInitialization(





More information about the cfe-commits mailing list