Hahnfeld abandoned this revision. ================ Comment at: lib/CodeGen/CGStmtOpenMP.cpp:913-929 @@ -912,9 +912,19 @@ }); - } else if (auto *ASE = dyn_cast<ArraySubscriptExpr>(IRef)) { - auto *Base = ASE->getBase()->IgnoreParenImpCasts(); - while (auto *TempASE = dyn_cast<ArraySubscriptExpr>(Base)) - Base = TempASE->getBase()->IgnoreParenImpCasts(); + } else if (isa<ArraySubscriptExpr>(IRef) || isa<UnaryOperator>(IRef)) { + const Expr *Array; + const Expr *Base; + if (auto* ASE = dyn_cast<ArraySubscriptExpr>(IRef)) { + Array = ASE; + Base = ASE->getBase()->IgnoreParenImpCasts(); + while (auto *TempASE = dyn_cast<ArraySubscriptExpr>(Base)) + Base = TempASE->getBase()->IgnoreParenImpCasts(); + } else { + auto* UO = cast<UnaryOperator>(IRef); + assert(UO->getOpcode() == UO_Deref && "should be a dereference"); + Array = UO; + Base = UO->getSubExpr()->IgnoreParenImpCasts(); + } auto *DE = cast<DeclRefExpr>(Base); auto *OrigVD = cast<VarDecl>(DE->getDecl()); - auto ASELValue = EmitLValue(ASE); + auto ASELValue = EmitLValue(Array); auto OriginalBaseLValue = EmitLValue(DE); ---------------- ABataev wrote: > This is not allowed by OpenMP standard. I added support for array subscripts > because they are very similar to array sections, but unary operations are > definitely not allowed Ok, I'm fine with that and will close this revision.
(for me `*arr` is the same as `arr[0]` so I expected it to work as well) http://reviews.llvm.org/D18276 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits