From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30942 invoked by alias); 15 Aug 2014 12:27:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 30929 invoked by uid 89); 15 Aug 2014 12:27:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f176.google.com Received: from mail-pd0-f176.google.com (HELO mail-pd0-f176.google.com) (209.85.192.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 15 Aug 2014 12:27:04 +0000 Received: by mail-pd0-f176.google.com with SMTP id y10so3248372pdj.35 for ; Fri, 15 Aug 2014 05:26:59 -0700 (PDT) X-Received: by 10.66.240.197 with SMTP id wc5mr9812695pac.87.1408105619465; Fri, 15 Aug 2014 05:26:59 -0700 (PDT) Received: from msticlxl7.ims.intel.com (jfdmzpr02-ext.jf.intel.com. [134.134.137.71]) by mx.google.com with ESMTPSA id t7sm11828041pdj.94.2014.08.15.05.26.56 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Aug 2014 05:26:58 -0700 (PDT) Date: Fri, 15 Aug 2014 12:27:00 -0000 From: Ilya Tocar To: Jakub Jelinek Cc: GCC Patches , Ilya Verbin Subject: Re: [PATCH] Warn about unclosed pragma omp declare target. Message-ID: <20140815122645.GB8954@msticlxl7.ims.intel.com> References: <20140729144501.GA102135@msticlxl7.ims.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20140729144501.GA102135@msticlxl7.ims.intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes X-SW-Source: 2014-08/txt/msg01579.txt.bz2 Ping. On 29 Jul 18:45, Ilya Tocar wrote: > Hi, > > As discussed here in https://gcc.gnu.org/ml/gcc/2014-01/msg00189.html > Gcc should complain about pragma omp declare target without > corresponding pragma omp end declare target. This patch adds a warning > for those cases. > Bootstraps/passes make-check. > Ok for trunk? > > ChangeLog: > > 2014-07-29 Ilya Tocar > > * c-decl.c (omp_declare_target_location_stack): New. > * c-lang.h (omp_declare_target_location_stack): Declare. > * c-parser.c (warn_unclosed_pragma_omp_target): New. > (c_parser_translation_unit): Call it. > (c_parser_omp_declare_target): Remeber location. > (c_parser_omp_end_declare_target): Forget location. > > And ChangeLog for testsuite: > > 2014-07-29 Ilya Tocar > > * gcc.dg/gomp//target-3.c: New testcase. > > --- > gcc/c/c-decl.c | 3 +++ > gcc/c/c-lang.h | 3 +++ > gcc/c/c-parser.c | 22 +++++++++++++++++++++- > gcc/testsuite/gcc.dg/gomp/target-3.c | 33 +++++++++++++++++++++++++++++++++ > 4 files changed, 60 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/gomp/target-3.c > > diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c > index 2a4b439..2dd5b2c 100644 > --- a/gcc/c/c-decl.c > +++ b/gcc/c/c-decl.c > @@ -158,6 +158,9 @@ enum machine_mode c_default_pointer_mode = VOIDmode; > /* If non-zero, implicit "omp declare target" attribute is added into the > attribute lists. */ > int current_omp_declare_target_attribute; > + > +/* Holds locations of currently open "omp declare target" pragmas. */ > +vec omp_declare_target_location_stack; > > /* Each c_binding structure describes one binding of an identifier to > a decl. All the decls in a scope - irrespective of namespace - are > diff --git a/gcc/c/c-lang.h b/gcc/c/c-lang.h > index e974906..cef995c 100644 > --- a/gcc/c/c-lang.h > +++ b/gcc/c/c-lang.h > @@ -59,4 +59,7 @@ struct GTY(()) language_function { > attribute lists. */ > extern GTY(()) int current_omp_declare_target_attribute; > > +/* Holds locations of currently open "omp declare target" pragmas. */ > +extern vec omp_declare_target_location_stack; > + > #endif /* ! GCC_C_LANG_H */ > diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c > index e32bf04..0b96fe9 100644 > --- a/gcc/c/c-parser.c > +++ b/gcc/c/c-parser.c > @@ -1255,6 +1255,8 @@ static bool c_parser_cilk_verify_simd (c_parser *, enum pragma_context); > static tree c_parser_array_notation (location_t, c_parser *, tree, tree); > static tree c_parser_cilk_clause_vectorlength (c_parser *, tree, bool); > > +static void warn_unclosed_pragma_omp_target (); > + > /* Parse a translation unit (C90 6.7, C99 6.9). > > translation-unit: > @@ -1290,6 +1292,8 @@ c_parser_translation_unit (c_parser *parser) > } > while (c_parser_next_token_is_not (parser, CPP_EOF)); > } > + > + warn_unclosed_pragma_omp_target (); > } > > /* Parse an external declaration (C90 6.7, C99 6.9). > @@ -13068,8 +13072,10 @@ c_finish_omp_declare_simd (c_parser *parser, tree fndecl, tree parms, > static void > c_parser_omp_declare_target (c_parser *parser) > { > + location_t loc = c_parser_peek_token (parser)->location; > c_parser_skip_to_pragma_eol (parser); > current_omp_declare_target_attribute++; > + omp_declare_target_location_stack.safe_push (loc); > } > > static void > @@ -13104,7 +13110,10 @@ c_parser_omp_end_declare_target (c_parser *parser) > error_at (loc, "%<#pragma omp end declare target%> without corresponding " > "%<#pragma omp declare target%>"); > else > - current_omp_declare_target_attribute--; > + { > + current_omp_declare_target_attribute--; > + omp_declare_target_location_stack.pop (); > + } > } > > > @@ -14267,4 +14276,15 @@ c_parser_array_notation (location_t loc, c_parser *parser, tree initial_index, > return value_tree; > } > > +static void > +warn_unclosed_pragma_omp_target () > +{ > + int i; > + for (i = 0; i < current_omp_declare_target_attribute; i++) > + warning_at (omp_declare_target_location_stack[i], 0, > + "%<#pragma omp declare target%> without corresponding " > + "%<#pragma omp end declare target%>"); > + omp_declare_target_location_stack.release (); > +} > + > #include "gt-c-c-parser.h" > diff --git a/gcc/testsuite/gcc.dg/gomp/target-3.c b/gcc/testsuite/gcc.dg/gomp/target-3.c > new file mode 100644 > index 0000000..d50604f > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/gomp/target-3.c > @@ -0,0 +1,33 @@ > +/* { dg-do compile } */ > +/* { dg-options "-fopenmp" } */ > + > +#pragma omp declare target > +int tgtv = 6; > + > +int > +tgt (void) > +{ > + tgtv++; > + return 0; > +} > +#pragma omp end declare target > + > +#pragma omp declare target /* { dg-warning "'#pragma omp declare target' without corresponding '#pragma omp end declare target'" } */ > +int tgtv1 = 6; > +#pragma omp declare target /* { dg-warning "'#pragma omp declare target' without corresponding '#pragma omp end declare target'" } */ > + > +int > +tgt2 (void) > +{ > + tgtv1++; > + return 0; > +} > + > +#pragma omp declare target > +int > +tgt3 (void) > +{ > + tgtv1++; > + return 0; > +} > +#pragma omp end declare target > -- > 1.8.3.1 >