[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
jyu2-git wrote: I put a possible fix in https://github.com/llvm/llvm-project/pull/90800 I am waiting for test to finish. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
vitalybuka wrote: I am not sure what should be a correct fix, so I'll revert? https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
vitalybuka wrote: Breaks https://lab.llvm.org/buildbot/#/builders/5/builds/43086 https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/jyu2-git closed https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
jyu2-git wrote: > LG Thanks Alexey! https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/alexey-bataev approved this pull request. LG https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -4675,8 +4709,10 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, // Only parse map-type-modifier[s] and map-type if a colon is present in // the map clause. if (ColonPresent) { + if (getLangOpts().OpenMP >= 60 && getCurToken().is(tok::colon)) jyu2-git wrote: parseMapTypeModifiers is recursive function. I don't I have good place to added that. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -4675,8 +4709,10 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, // Only parse map-type-modifier[s] and map-type if a colon is present in // the map clause. if (ColonPresent) { + if (getLangOpts().OpenMP >= 60 && getCurToken().is(tok::colon)) alexey-bataev wrote: Maybe emit then the error in parseMapTypeModifiers too? https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -4675,8 +4709,10 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, // Only parse map-type-modifier[s] and map-type if a colon is present in // the map clause. if (ColonPresent) { + if (getLangOpts().OpenMP >= 60 && getCurToken().is(tok::colon)) jyu2-git wrote: I only need to emit error for map(: a), I don't need emit error like map(,,: a), since the error already emit during parseMapTypeModifiers. The ColonPresent will be set for when ":" exist for map clause. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} alexey-bataev wrote: Yes, if you have dangling `:` without modifier list https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} jyu2-git wrote: All those can be omitted, but error is needed for empty modifier-list? https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} alexey-bataev wrote: Check page 100, the supported format is `[modifier-specification-list :]clause-argument-list` https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/jyu2-git edited https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} jyu2-git wrote: Hi Alexey, could you specify where 4.2 says that. I back look at 6.8.3 map-type locator-list Keyword: alloc, delete, from, release, to, tofrom default Thanks. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} alexey-bataev wrote: Hm,, I see in 4.2 Clause Format that it is not allowed https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} jyu2-git wrote: Yes. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/jyu2-git updated https://github.com/llvm/llvm-project/pull/90499 >From 20904df466de953880ca6af4afd72d7dfae33224 Mon Sep 17 00:00:00 2001 From: Jennifer Yu Date: Mon, 29 Apr 2024 10:01:12 -0700 Subject: [PATCH 1/2] [OpenMP][TR12] change proerty of map-type modifer. map-type change to "default" instead "ultimate" from [OpenMP5.2] The change is allowed map-type to be placed any locations within map modifiers, besides the last location in the modifiers-list, also map-type can be omitted afterward. --- .../clang/Basic/DiagnosticParseKinds.td | 3 + clang/lib/Parse/ParseOpenMP.cpp | 35 +- clang/test/OpenMP/target_ast_print.cpp| 58 ++ clang/test/OpenMP/target_map_messages.cpp | 105 ++ 4 files changed, 153 insertions(+), 48 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td index fdffb35ea0d955..c3b50d59da6e36 100644 --- a/clang/include/clang/Basic/DiagnosticParseKinds.td +++ b/clang/include/clang/Basic/DiagnosticParseKinds.td @@ -1438,6 +1438,9 @@ def err_omp_decl_in_declare_simd_variant : Error< def err_omp_sink_and_source_iteration_not_allowd: Error<" '%0 %select{sink:|source:}1' must be with '%select{omp_cur_iteration - 1|omp_cur_iteration}1'">; def err_omp_unknown_map_type : Error< "incorrect map type, expected one of 'to', 'from', 'tofrom', 'alloc', 'release', or 'delete'">; +def err_omp_more_one_map_type : Error<"map type is already specified">; +def note_previous_map_type_specified_here +: Note<"map type '%0' is previous specified here">; def err_omp_unknown_map_type_modifier : Error< "incorrect map type modifier, expected one of: 'always', 'close', 'mapper'" "%select{|, 'present'|, 'present', 'iterator'}0%select{|, 'ompx_hold'}1">; diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 480201bc06f613..ad1cda161eaf06 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -4228,13 +4228,19 @@ bool Parser::parseMapperModifier(SemaOpenMP::OpenMPVarListDataTy &Data) { return T.consumeClose(); } +static OpenMPMapClauseKind isMapType(Parser &P); + /// Parse map-type-modifiers in map clause. /// map([ [map-type-modifier[,] [map-type-modifier[,] ...] map-type : ] list) /// where, map-type-modifier ::= always | close | mapper(mapper-identifier) | /// present bool Parser::parseMapTypeModifiers(SemaOpenMP::OpenMPVarListDataTy &Data) { + bool HasMapType = false; + SourceLocation PreMapLoc = Tok.getLocation(); + StringRef PreMapName = ""; while (getCurToken().isNot(tok::colon)) { OpenMPMapModifierKind TypeModifier = isMapModifier(*this); +OpenMPMapClauseKind MapKind = isMapType(*this); if (TypeModifier == OMPC_MAP_MODIFIER_always || TypeModifier == OMPC_MAP_MODIFIER_close || TypeModifier == OMPC_MAP_MODIFIER_present || @@ -4257,6 +4263,19 @@ bool Parser::parseMapTypeModifiers(SemaOpenMP::OpenMPVarListDataTy &Data) { Diag(Data.MapTypeModifiersLoc.back(), diag::err_omp_missing_comma) << "map type modifier"; +} else if (getLangOpts().OpenMP >= 60 && MapKind != OMPC_MAP_unknown) { + if (!HasMapType) { +HasMapType = true; +Data.ExtraModifier = MapKind; +MapKind = OMPC_MAP_unknown; +PreMapLoc = Tok.getLocation(); +PreMapName = Tok.getIdentifierInfo()->getName(); + } else { +Diag(Tok, diag::err_omp_more_one_map_type); +Diag(PreMapLoc, diag::note_previous_map_type_specified_here) +<< PreMapName; + } + ConsumeToken(); } else { // For the case of unknown map-type-modifier or a map-type. // Map-type is followed by a colon; the function returns when it @@ -4268,7 +4287,11 @@ bool Parser::parseMapTypeModifiers(SemaOpenMP::OpenMPVarListDataTy &Data) { } // Potential map-type token as it is followed by a colon. if (PP.LookAhead(0).is(tok::colon)) -return false; +if (getLangOpts().OpenMP >= 60) + break; +else + return false; + Diag(Tok, diag::err_omp_unknown_map_type_modifier) << (getLangOpts().OpenMP >= 51 ? (getLangOpts().OpenMP >= 52 ? 2 : 1) : 0) @@ -4278,6 +4301,14 @@ bool Parser::parseMapTypeModifiers(SemaOpenMP::OpenMPVarListDataTy &Data) { if (getCurToken().is(tok::comma)) ConsumeToken(); } + if (getLangOpts().OpenMP >= 60 && !HasMapType) { +if (!Tok.is(tok::colon)) { + Diag(Tok, diag::err_omp_unknown_map_type); + ConsumeToken(); +} else { + Data.ExtraModifier = OMPC_MAP_unknown; +} + } return false; } @@ -4676,7 +4707,7 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, // the map clause. if (ColonPresent) { IsInvalidMapperModifier = parseMapTypeModifiers(Data); - if (!IsInvalidMapperModifier
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/alexey-bataev edited https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} alexey-bataev wrote: So, does hanging `:` is allowed? https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} jyu2-git wrote: In OMP60, the map-type can be omitted. Will be default tofrom. https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -113,7 +114,7 @@ struct SA { #pragma omp target map(b[true:true]) {} -#pragma omp target map(: c,f) // expected-error {{missing map type}} +#pragma omp target map(: c,f) // lt60-error {{missing map type}} alexey-bataev wrote: I assume this also must be reported as an error for 6.0, no? https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
@@ -4268,7 +4287,11 @@ bool Parser::parseMapTypeModifiers(SemaOpenMP::OpenMPVarListDataTy &Data) { } // Potential map-type token as it is followed by a colon. if (PP.LookAhead(0).is(tok::colon)) -return false; +if (getLangOpts().OpenMP >= 60) + break; +else + return false; + alexey-bataev wrote: Need extra braces here to correctly handle else https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][TR12] change property of map-type modifier. (PR #90499)
https://github.com/alexey-bataev edited https://github.com/llvm/llvm-project/pull/90499 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits