[cfe-commits] r133943 - in /cfe/trunk/lib: CodeGen/CGExpr.cpp Sema/SemaExprCXX.cpp

Nico Weber thakis at chromium.org
Wed Jun 29 00:13:51 PDT 2011


Thanks!

On Mon, Jun 27, 2011 at 2:24 PM, John McCall <rjmccall at apple.com> wrote:
> Author: rjmccall
> Date: Mon Jun 27 16:24:11 2011
> New Revision: 133943
>
> URL: http://llvm.org/viewvc/llvm-project?rev=133943&view=rev
> Log:
> Fix PR10204 in a better way.
>
>
> Modified:
>    cfe/trunk/lib/CodeGen/CGExpr.cpp
>    cfe/trunk/lib/Sema/SemaExprCXX.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=133943&r1=133942&r2=133943&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Mon Jun 27 16:24:11 2011
> @@ -791,9 +791,7 @@
>     return RValue::get(EmitARCLoadWeak(LV.getAddress()));
>
>   if (LV.isSimple()) {
> -    // Functions are l-values that don't require loading.
> -    if (LV.getType()->isFunctionType())
> -      return RValue::get(LV.getAddress());
> +    assert(!LV.getType()->isFunctionType());
>
>     // Everything needs a load.
>     return RValue::get(EmitLoadOfScalar(LV));
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=133943&r1=133942&r2=133943&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Mon Jun 27 16:24:11 2011
> @@ -4461,7 +4461,16 @@
>   //   [Except in specific positions,] an lvalue that does not have
>   //   array type is converted to the value stored in the
>   //   designated object (and is no longer an lvalue).
> -  if (E->isRValue()) return Owned(E);
> +  if (E->isRValue()) {
> +    // In C, function designators (i.e. expressions of function type)
> +    // are r-values, but we still want to do function-to-pointer decay
> +    // on them.  This is both technically correct and convenient for
> +    // some clients.
> +    if (!getLangOptions().CPlusPlus && E->getType()->isFunctionType())
> +      return DefaultFunctionArrayConversion(E);
> +
> +    return Owned(E);
> +  }
>
>   // We always want to do this on ObjC property references.
>   if (E->getObjectKind() == OK_ObjCProperty) {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>




More information about the cfe-commits mailing list