================ @@ -143,26 +139,25 @@ ParseOpenACCEnterExitDataDirective(Parser &P, Token FirstTok, : OpenACCDirectiveKind::ExitData; } -OpenACCDirectiveKind ParseOpenACCAtomicDirective(Parser &P) { +OpenACCAtomicKind ParseOpenACCAtomicKind(Parser &P) { Token AtomicClauseToken = P.getCurToken(); - if (AtomicClauseToken.isAnnotation()) { - P.Diag(AtomicClauseToken, diag::err_acc_invalid_atomic_clause) << 0; - return OpenACCDirectiveKind::Invalid; - } + // #pragma acc atomic is equivilent to update: + if (AtomicClauseToken.isAnnotation()) + return OpenACCAtomicKind::Update; std::string AtomicClauseSpelling = P.getPreprocessor().getSpelling(AtomicClauseToken); + OpenACCAtomicKind AtomicKind = getOpenACCAtomicKind(AtomicClauseSpelling); - OpenACCDirectiveKind DirKind = - getOpenACCAtomicDirectiveKind(AtomicClauseSpelling); - - if (DirKind == OpenACCDirectiveKind::Invalid) - P.Diag(AtomicClauseToken, diag::err_acc_invalid_atomic_clause) - << 1 << AtomicClauseSpelling; + // If we don't know what this is, treat it as 'nothing', and treat the rest of + // this as a clause list, which, despite being invalid, is likely what the + // user was trying to do. + if (AtomicKind == OpenACCAtomicKind::Invalid) + return OpenACCAtomicKind::Update; ---------------- alexey-bataev wrote:
Shall you consume token here before return? https://github.com/llvm/llvm-project/pull/73015 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits