Fix assert on the variable which is used in omp clause is not marked
authorJennifer Yu <jennifer.yu@intel.com>
Mon, 3 May 2021 18:19:59 +0000 (11:19 -0700)
committerJennifer Yu <jennifer.yu@intel.com>
Tue, 4 May 2021 16:07:35 +0000 (09:07 -0700)
commit5285748c2c764c1d7fb3f882ba9f11ed79f676a1
tree79ca7720e4bf83498f6abf299b9557a19dd521cb
parentb1048ff68298c1c4e303bbb77ca1832b2f873cd6
Fix assert on the variable which is used in omp clause is not marked
as used.

The problem only happens with constexpr variable, for constexpr variable,
variable is not marked during parser variable.   This is because compiler
might find some var's associate expressions may not actully an odr-used
later,  the variables get kept in MaybeODRUseExprs, in normal case, at
end of process fullExpr, the variable will be marked during the call to
CleanupVarDeclMarking(). Since we are processing expression of OpenMP
clauses, and the ActOnFinishFullExpr is not getting called that casue
variable is not get marked.

One way to fix this is to call CleanupVarDeclMarking() in EndOpenMPClause
for each omp directive.

This to fix https://bugs.llvm.org/show_bug.cgi?id=50206

Differential Revision: https://reviews.llvm.org/D101781
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/constexpr_capture.cpp