[PATCH] D74144: [OPENMP50]Add basic support for array-shaping operation.
Chi Chun Chen via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 1 15:50:57 PDT 2020
cchen added a comment.
Herald added subscribers: sstefan1, yaxunl.
@ABataev, the below test is extracted from Sollve test suite and Clang now emit:
test.c:17:35: error: subscripted value is not an array or pointer
#pragma omp target update to( (([N][N])foo)[1:M] )
^~~~~~~~~~~~~
test.c:17:5: error: expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'
#pragma omp target update to( (([N][N])foo)[1:M] )
This error message came from the `ActOnOMPArraySectionExpr` which is called inside `ParsePostfixExpressionSuffix`. The issue is that the base expression in `ActOnOMPArraySectionExpr` looks like:
ParenExpr 0x122859be0 '<OpenMP array shaping type>' lvalue
`-OMPArrayShapingExpr 0x122859b98 '<OpenMP array shaping type>' lvalue
|-IntegerLiteral 0x122859b38 'int' 5
|-IntegerLiteral 0x122859b58 'int' 5
`-DeclRefExpr 0x122859b78 'int *' lvalue Var 0x1228599d0 'foo' 'int *'
which is not a base that we would expect in an array section expr. I've tried relaxing the base type check in `ActOnOMPArraySectionExpr` but not sure it's the way to go. (or should I just extract the DeclReExpr from ArrayShapingExpr before calling `ActOnOMPArraySectionExpr`?)
#define N 5
#define M 3
int main(void) {
int tmp[N][N];
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
tmp[i][j] = N*i + j;
int *foo = &tmp[0][0];
// This compiles just fine
//#pragma omp target update to( ([N][N])foo )
// This is rejected by the compiler
#pragma omp target update to( (([N][N])foo)[1:M] )
}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74144/new/
https://reviews.llvm.org/D74144
More information about the cfe-commits
mailing list