From: Argyrios Kyrtzidis Date: Thu, 11 Sep 2008 04:25:59 +0000 (+0000) Subject: Allow array-to-pointer conversion for rvalues. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c39a3d76737cce06116145c24f9821857e214e59;p=clang Allow array-to-pointer conversion for rvalues. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56094 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index aa8f194e8f..032df06c72 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -47,7 +47,13 @@ void Sema::DefaultFunctionArrayConversion(Expr *&E) { // to type'...". In C99 this was changed to: C99 6.3.2.1p3: "an expression // that has type 'array of type' ...". The relevant change is "an lvalue" // (C90) to "an expression" (C99). - if (getLangOptions().C99 || E->isLvalue(Context) == Expr::LV_Valid) + // + // C++ 4.2p1: + // An lvalue or rvalue of type "array of N T" or "array of unknown bound of + // T" can be converted to an rvalue of type "pointer to T". + // + if (getLangOptions().C99 || getLangOptions().CPlusPlus || + E->isLvalue(Context) == Expr::LV_Valid) ImpCastExprToType(E, Context.getArrayDecayedType(Ty)); } }