<html>
  <head>
    <meta content="text/html; charset=KOI8-R" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">
      <blockquote type="cite"><tt><font size="2">> > b) As other
            nesting constraints are added in future commits, I expect
            the<br>
            > > complexity/readability of CheckNestingOfRegions()
            to increase. For now it<br>
            > > is okay, but I think that maintaining some static
            information about all the<br>
            > > valid/invalid nestings will simplify the way this
            function is implemented<br>
            > > and improve readability.<br>
            > What kind of static info do you mean?</font></tt><br>
        <br>
        <tt><font size="2">I meant some sort of static table whose
            elements contain the valid nestings, like:</font></tt><br>
        <br>
        <tt><font size="2">[Parent Directive Kind, Current Directive
            Kind, Closely|No-Closely|Both ]</font></tt><br>
      </blockquote>
      Ok, got it. I'll add this table as a comment to the function.<br>
      <br>
      <pre class="moz-signature" cols="72">Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team</pre>
      27.06.2014 8:50, Samuel F Antao ΠΙΫΕΤ:<br>
    </div>
    <blockquote
cite="mid:OFE1C3D1BE.2C6BC05E-ON85257D04.00193FD5-85257D04.001A9146@us.ibm.com"
      type="cite">
      <p><font face="sans-serif" size="2">Hi Alexey,</font><br>
        <br>
        <tt><font size="2">Alexey Bataev <a class="moz-txt-link-rfc2396E" href="mailto:a.bataev@hotmail.com"><a.bataev@hotmail.com></a>
            wrote on 06/26/2014 11:29:04 PM:<br>
            <br>
            > From: Alexey Bataev <a class="moz-txt-link-rfc2396E" href="mailto:a.bataev@hotmail.com"><a.bataev@hotmail.com></a></font></tt><br>
        <tt><font size="2">> To: <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a>, Samuel F
            Antao/Watson/IBM@IBMUS</font></tt><br>
        <tt><font size="2">> Date: 06/26/2014 11:29 PM</font></tt><br>
        <tt><font size="2">> Subject: Re: r211566 - [OPENMP] Added
            initial checking of nesting of<br>
            > OpenMP regions.</font></tt><br>
        <tt><font size="2">> <br>
            > Hi Samuel,<br>
            > Thanks for the review.<br>
            > > a) šIn in SemaOpenMP.cpp lines 936, 2292, 2404,
            2797<br>
            > > isOpenMPWorksharingDirective() dominates all the
            other elements of the<br>
            > > conditional i.e. the Boolean value returned by
            this function will be the<br>
            > > same as the remaining components of the
            conditional. So, the other<br>
            > > components can be removed.<br>
            > ><br>
            > This is done for future combined constructs like 'omp
            parallel for' <br>
            > which is parallel and worksharing at same time.</font></tt><br>
        <br>
        <tt><font size="2">Ok. Makes sense.</font></tt><br>
        <tt><font size="2"><br>
            > > b) As other nesting constraints are added in
            future commits, I expect the<br>
            > > complexity/readability of CheckNestingOfRegions()
            to increase. For now it<br>
            > > is okay, but I think that maintaining some static
            information about all the<br>
            > > valid/invalid nestings will simplify the way this
            function is implemented<br>
            > > and improve readability.<br>
            > What kind of static info do you mean?</font></tt><br>
        <br>
        <tt><font size="2">I meant some sort of static table whose
            elements contain the valid nestings, like:</font></tt><br>
        <br>
        <tt><font size="2">[Parent Directive Kind, Current Directive
            Kind, Closely|No-Closely|Both ]</font></tt><br>
        <br>
        <tt><font size="2">If the nesting under test is not in the table
            it would fail. As I have mentioned, the code looks okay</font></tt><br>
        <tt><font size="2">right now, but in the future if we see that
            function starts to get messy due to the nestings
            combinations</font></tt><br>
        <tt><font size="2">one can implement a solution like this. š</font></tt><br>
        <tt><font size="2"><br>
            > > c) For the sake of completeness I think
            nestings_of_regions.cpp should also<br>
            > > have a case where a nesting exists but it is not
            closely nested. It may not<br>
            > > make a lot of sense from an application point of
            view, but I think it<br>
            > > should be useful to have something like this in
            the testcase:<br>
            > ><br>
            > > #pragma omp parallel<br>
            > > #pragma omp for<br>
            > > š šfor (int i = 0; i < 10; ++i){<br>
            > > #pragma omp parallel<br>
            > > š š šfor (int i = 0; i < 10; ++i){<br>
            > > #pragma omp for<br>
            > > š š š šfor (int i = 0; i < 10; ++i);<br>
            > > š š š}<br>
            > > š š}<br>
            > ><br>
            > Ok, I'll add such tests.</font></tt><br>
        <br>
        <tt><font size="2">Ok, thanks.</font></tt><br>
        <tt><font size="2"><br>
            > > Question: Why the template version of foo in the
            testcase?<br>
            > Templates are very tricky constructs and actually we
            have to test all <br>
            > directives inside template constructs to be sure that
            we handle <br>
            > templates properly and instantiation and specialization
            works for each <br>
            > directive.</font></tt><br>
        <br>
        <tt><font size="2">Got it.</font></tt><br>
        <tt><font size="2"><br>
            > <br>
            > Best regards,<br>
            > Alexey Bataev<br>
            > =============<br>
            > Software Engineer<br>
            > Intel Compiler Team<br>
            > <br>
            > 27.06.2014 2:48, <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits-request@cs.uiuc.edu">cfe-commits-request@cs.uiuc.edu</a> ΠΙΫΕΤ:<br>
            > > Send cfe-commits mailing list submissions to<br>
            > > š š<a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
            > ><br>
            > > To subscribe or unsubscribe via the World Wide
            Web, visit<br>
            > > š š<a moz-do-not-send="true"
              href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
            > > or, via email, send a message with subject or body
            'help' to<br>
            > > š š<a class="moz-txt-link-abbreviated" href="mailto:cfe-commits-request@cs.uiuc.edu">cfe-commits-request@cs.uiuc.edu</a><br>
            > ><br>
            > > You can reach the person managing the list at<br>
            > > š š<a class="moz-txt-link-abbreviated" href="mailto:cfe-commits-owner@cs.uiuc.edu">cfe-commits-owner@cs.uiuc.edu</a><br>
            > ><br>
            > > When replying, please edit your Subject line so it
            is more specific<br>
            > > than "Re: Contents of cfe-commits digest..."<br>
            > ><br>
            > ><br>
            > > Today's Topics:<br>
            > ><br>
            > > š š 1. Re: r211566 - [OPENMP] Added initial
            checking of nesting of<br>
            > > š š š šOpenMP š regions. (Samuel F Antao)<br>
            > ><br>
            > ><br>
            > >
            ----------------------------------------------------------------------<br>
            > ><br>
            > > Message: 1<br>
            > > Date: Thu, 26 Jun 2014 18:48:56 -0400<br>
            > > From: Samuel F Antao <a class="moz-txt-link-rfc2396E" href="mailto:sfantao@us.ibm.com"><sfantao@us.ibm.com></a><br>
            > > To: <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
            > > Cc: <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits-bounces@cs.uiuc.edu">cfe-commits-bounces@cs.uiuc.edu</a><br>
            > > Subject: Re: r211566 - [OPENMP] Added initial
            checking of nesting of<br>
            > > š šOpenMP š regions.<br>
            > > Message-ID:<br>
            > > š
š<a class="moz-txt-link-rfc2396E" href="mailto:OFFB19983E.4AA6C883-ON85257D03.007A5672-85257D03.007D5442@us.ibm.com"><OFFB19983E.4AA6C883-ON85257D03.007A5672-85257D03.007D5442@us.ibm.com></a><br>
            > > Content-Type: text/plain; charset="us-ascii"<br>
            > ><br>
            > ><br>
            > > Hi Alexey,<br>
            > ><br>
            > > I took a close look into this commit and I have
            some suggestions to make:<br>
            > ><br>
            > > a) šIn in SemaOpenMP.cpp lines 936, 2292, 2404,
            2797<br>
            > > isOpenMPWorksharingDirective() dominates all the
            other elements of the<br>
            > > conditional i.e. the Boolean value returned by
            this function will be the<br>
            > > same as the remaining components of the
            conditional. So, the other<br>
            > > components can be removed.<br>
            > ><br>
            > > b) As other nesting constraints are added in
            future commits, I expect the<br>
            > > complexity/readability of CheckNestingOfRegions()
            to increase. For now it<br>
            > > is okay, but I think that maintaining some static
            information about all the<br>
            > > valid/invalid nestings will simplify the way this
            function is implemented<br>
            > > and improve readability.<br>
            > ><br>
            > > c) For the sake of completeness I think
            nestings_of_regions.cpp should also<br>
            > > have a case where a nesting exists but it is not
            closely nested. It may not<br>
            > > make a lot of sense from an application point of
            view, but I think it<br>
            > > should be useful to have something like this in
            the testcase:<br>
            > ><br>
            > > #pragma omp parallel<br>
            > > #pragma omp for<br>
            > > š šfor (int i = 0; i < 10; ++i){<br>
            > > #pragma omp parallel<br>
            > > š š šfor (int i = 0; i < 10; ++i){<br>
            > > #pragma omp for<br>
            > > š š š šfor (int i = 0; i < 10; ++i);<br>
            > > š š š}<br>
            > > š š}<br>
            > ><br>
            > > Question: Why the template version of foo in the
            testcase?<br>
            > ><br>
            > > Regards,<br>
            > > --Samuel Antao<br>
            > ><br>
            > ><br>
            > >> Date: Tue, 24 Jun 2014 04:39:47 -0000<br>
            > >> From: Alexey Bataev
            <a class="moz-txt-link-rfc2396E" href="mailto:a.bataev@hotmail.com"><a.bataev@hotmail.com></a><br>
            > >> To: <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
            > >> Subject: r211566 - [OPENMP] Added initial
            checking of nesting of<br>
            > >> š š OpenMP š regions.<br>
            > >> Message-ID:
            <a class="moz-txt-link-rfc2396E" href="mailto:20140624043948.3A2702A6C029@llvm.org"><20140624043948.3A2702A6C029@llvm.org></a><br>
            > >> Content-Type: text/plain; charset="utf-8"<br>
            > >><br>
            > >> Author: abataev<br>
            > >> Date: Mon Jun 23 23:39:47 2014<br>
            > >> New Revision: 211566<br>
            > >><br>
            > >> URL: <a moz-do-not-send="true"
              href="http://llvm.org/viewvc/llvm-project?rev=211566&view=rev">http://llvm.org/viewvc/llvm-project?rev=211566&view=rev</a><br>
            > >> Log:<br>
            > >> [OPENMP] Added initial checking of nesting of
            OpenMP regions.<br>
            > >><br>
            > >> Added:<br>
            > >> š š
            šcfe/trunk/test/OpenMP/nesting_of_regions.cpp š (with props)<br>
            > >> Modified:<br>
            > >> š š
            šcfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
            > >> š š šcfe/trunk/lib/Sema/SemaOpenMP.cpp<br>
            > >><br>
            > >> Modified:
            cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
            > >> URL: <a moz-do-not-send="true"
              href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/</a><br>
            > >>
Basic/DiagnosticSemaKinds.td?rev=211566&r1=211565&r2=211566&view=diff<br>
            > >><br>
            > > <br>
            >
==============================================================================<br>
            > ><br>
            > >> ---
            cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
            (original)<br>
            > >> +++
            cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Jun
            23<br>
            > >> 23:39:47 2014<br>
            > >> @@ -7096,6 +7096,11 @@ def
            err_omp_reduction_in_task : Error<<br>
            > >> š š "reduction variables may not be accessed
            in an explicit task">;<br>
            > >> š def err_omp_reduction_id_not_compatible :
            Error<<br>
            > >> š š "variable of type %0 is not valid for
            specified reduction operation">;<br>
            > >> +def err_omp_prohibited_region : Error<<br>
            > >> + š"region cannot be%select{| closely}0 nested
            inside '%1' region"<br>
            > >> + š"%select{|; perhaps you forget to enclose
            'omp %3' directive into<br>
            > >> a parallel region?}2">;<br>
            > >> +def err_omp_prohibited_region_simd :
            Error<<br>
            > >> + š"OpenMP constructs may not be nested inside
            a simd region">;<br>
            > >> š } // end of OpenMP category<br>
            > >><br>
            > >> š let CategoryName = "Related Result Type
            Issue" in {<br>
            > >><br>
            > >> Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp<br>
            > >> URL: <a moz-do-not-send="true"
              href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/</a><br>
            > >>
            SemaOpenMP.cpp?rev=211566&r1=211565&r2=211566&view=diff<br>
            > >><br>
            > > <br>
            >
==============================================================================<br>
            > ><br>
            > >> --- cfe/trunk/lib/Sema/SemaOpenMP.cpp
            (original)<br>
            > >> +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Mon Jun
            23 23:39:47 2014<br>
            > >> @@ -152,6 +152,12 @@ public:<br>
            > >> š š OpenMPDirectiveKind getCurrentDirective()
            const {<br>
            > >> š š š return Stack.back().Directive;<br>
            > >> š š }<br>
            > >> + š/// \brief Returns parent directive.<br>
            > >> + šOpenMPDirectiveKind getParentDirective()
            const {<br>
            > >> + š šif (Stack.size() > 2)<br>
            > >> + š š šreturn Stack[Stack.size() -
            2].Directive;<br>
            > >> + š šreturn OMPD_unknown;<br>
            > >> + š}<br>
            > >><br>
            > >> š š /// \brief Set default data sharing
            attribute to none.<br>
            > >> š š void setDefaultDSANone() {
            Stack.back().DefaultAttr = DSA_none; }<br>
            > >> @@ -912,6 +918,41 @@ void
            Sema::ActOnOpenMPRegionStart(OpenMP<br>
            > >> š š }<br>
            > >> š }<br>
            > >><br>
            > >> +bool CheckNestingOfRegions(Sema &SemaRef,
            DSAStackTy *Stack,<br>
            > >> + š š š š š š š š š š š š š
            OpenMPDirectiveKind CurrentRegion,<br>
            > >> + š š š š š š š š š š š š š SourceLocation
            StartLoc) {<br>
            > >> + šif (Stack->getCurScope()) {<br>
            > >> + š šauto ParentRegion =
            Stack->getParentDirective();<br>
            > >> + š šbool NestingProhibited = false;<br>
            > >> + š šbool CloseNesting = true;<br>
            > >> + š šbool ShouldBeInParallelRegion = false;<br>
            > >> + š šif (isOpenMPSimdDirective(ParentRegion))
            {<br>
            > >> + š š š// OpenMP [2.16, Nesting of Regions]<br>
            > >> + š š š// OpenMP constructs may not be nested
            inside a simd region.<br>
            > >> + š š šSemaRef.Diag(StartLoc,
            diag::err_omp_prohibited_region_simd);<br>
            > >> + š š šreturn true;<br>
            > >> + š š}<br>
            > >> + š šif
            (isOpenMPWorksharingDirective(CurrentRegion) &&<br>
            > >> + š š š
            š!isOpenMPParallelDirective(CurrentRegion) &&<br>
            > >> + š š š
            š!isOpenMPSimdDirective(CurrentRegion)) {<br>
            > >> + š š š// OpenMP [2.16, Nesting of Regions]<br>
            > >> + š š š// A worksharing region may not be
            closely nested inside a<br>
            > > worksharing,<br>
            > >> + š š š// explicit task, critical, ordered,
            atomic, or master region.<br>
            > >> + š š š// TODO<br>
            > >> + š š šNestingProhibited =
            isOpenMPWorksharingDirective(ParentRegion) &&<br>
            > >> + š š š š š š š š š š š š
            š!isOpenMPSimdDirective(ParentRegion);<br>
            > >> + š š šShouldBeInParallelRegion = true;<br>
            > >> + š š}<br>
            > >> + š šif (NestingProhibited) {<br>
            > >> + š š šSemaRef.Diag(StartLoc,
            diag::err_omp_prohibited_region)<br>
            > >> + š š š š š<< CloseNesting <<
            getOpenMPDirectiveName(ParentRegion) <<<br>
            > > true<br>
            > >> + š š š š š<<
            getOpenMPDirectiveName(CurrentRegion) <<<br>
            > >> ShouldBeInParallelRegion;<br>
            > >> + š š šreturn true;<br>
            > >> + š š}<br>
            > >> + š}<br>
            > >> + šreturn false;<br>
            > >> +}<br>
            > >> +<br>
            > >> š StmtResult
            Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind<br>
            > > Kind,<br>
            > >> š š š š š š š š š š š š š š š š š š š š š š š
            š š ArrayRef<OMPClause<br>
            > >> *> Clauses,<br>
            > >> š š š š š š š š š š š š š š š š š š š š š š š
            š š Stmt *AStmt,<br>
            > >> @@ -920,6 +961,8 @@ StmtResult
            Sema::ActOnOpenMPExecutableDi<br>
            > >> š š assert(AStmt &&
            isa<CapturedStmt>(AStmt) && "Captured
            statement<br>
            > > expected");<br>
            > >> š š StmtResult Res = StmtError();<br>
            > >> + šif (CheckNestingOfRegions(*this, DSAStack,
            Kind, StartLoc))<br>
            > >> + š šreturn StmtError();<br>
            > >><br>
            > >> š š // Check default data sharing attributes
            for referenced variables.<br>
            > >> š š DSAAttrChecker DSAChecker(DSAStack, *this,
            cast<CapturedStmt>(AStmt));<br>
            > >> @@ -2246,7 +2289,8 @@ OMPClause
            *Sema::ActOnOpenMPFirstprivate<br>
            > >> š š š š // šin a firstprivate clause on a
            worksharing construct if any of<br>
            > > the<br>
            > >> š š š š // šworksharing regions arising from
            the worksharing<br>
            > >> construct ever bind<br>
            > >> š š š š // što any of the parallel regions
            arising from the parallel<br>
            > > construct.<br>
            > >> - š š šif
            (isOpenMPWorksharingDirective(CurrDir)) {<br>
            > >> + š š šif
            (isOpenMPWorksharingDirective(CurrDir) &&<br>
            > >> + š š š š
            š!isOpenMPParallelDirective(CurrDir)) {<br>
            > >> š š š š š DVar =
            DSAStack->getImplicitDSA(VD);<br>
            > >> š š š š š if (DVar.CKind != OMPC_shared) {<br>
            > >> š š š š š š Diag(ELoc,
            diag::err_omp_required_access)<br>
            > >> @@ -2357,7 +2401,8 @@ OMPClause
            *Sema::ActOnOpenMPLastprivateC<br>
            > >> š š š // lastprivate clause on a worksharing
            construct if any of the<br>
            > >> corresponding<br>
            > >> š š š // worksharing regions ever binds to any
            of the corresponding<br>
            > > parallel<br>
            > >> š š š // regions.<br>
            > >> - š šif
            (isOpenMPWorksharingDirective(CurrDir)) {<br>
            > >> + š šif (isOpenMPWorksharingDirective(CurrDir)
            &&<br>
            > >> + š š š š!isOpenMPParallelDirective(CurrDir))
            {<br>
            > >> š š š š DVar =
            DSAStack->getImplicitDSA(VD);<br>
            > >> š š š š if (DVar.CKind != OMPC_shared) {<br>
            > >> š š š š š Diag(ELoc,
            diag::err_omp_required_access)<br>
            > >> @@ -2748,7 +2793,8 @@ OMPClause
            *Sema::ActOnOpenMPReductionCla<br>
            > >> š š š // šconstruct must be shared in the
            parallel regions to which any of<br>
            > > the<br>
            > >> š š š // šworksharing regions arising from the
            worksharing construct bind.<br>
            > >> š š š OpenMPDirectiveKind CurrDir =
            DSAStack->getCurrentDirective();<br>
            > >> - š šif
            (isOpenMPWorksharingDirective(CurrDir)) {<br>
            > >> + š šif (isOpenMPWorksharingDirective(CurrDir)
            &&<br>
            > >> + š š š š!isOpenMPParallelDirective(CurrDir))
            {<br>
            > >> š š š š DVar =
            DSAStack->getImplicitDSA(VD);<br>
            > >> š š š š if (DVar.CKind != OMPC_shared) {<br>
            > >> š š š š š Diag(ELoc,
            diag::err_omp_required_access)<br>
            > >><br>
            > >> Added:
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp<br>
            > >> URL: <a moz-do-not-send="true"
              href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/</a><br>
            > >>
            nesting_of_regions.cpp?rev=211566&view=auto<br>
            > >><br>
            > > <br>
            >
==============================================================================<br>
            > ><br>
            > >> ---
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp (added)<br>
            > >> +++
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp Mon Jun 23
            23:39:47 2014<br>
            > >> @@ -0,0 +1,82 @@<br>
            > >> +// RUN: %clang_cc1 -fsyntax-only
            -fopenmp=libiomp5 -verify %s<br>
            > >> +<br>
            > >> +template <class T><br>
            > >> +void foo() {<br>
            > >> +#pragma omp parallel<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> +#pragma omp parallel<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp for // expected-error {{OpenMP
            constructs may not be<br>
            > >> nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp simd // expected-error {{OpenMP
            constructs may not be<br>
            > >> nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp parallel // expected-error
            {{OpenMP constructs may not<br>
            > >> be nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp for // expected-error {{region
            cannot be closely nested<br>
            > >> inside 'for' region; perhaps you forget to
            enclose 'omp for'<br>
            > >> directive into a parallel region?}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp parallel<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +}<br>
            > >> +<br>
            > >> +void foo() {<br>
            > >> +#pragma omp parallel<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> +#pragma omp parallel<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp for // expected-error {{OpenMP
            constructs may not be<br>
            > >> nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp simd // expected-error {{OpenMP
            constructs may not be<br>
            > >> nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp parallel // expected-error
            {{OpenMP constructs may not<br>
            > >> be nested inside a simd region}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp for // expected-error {{region
            cannot be closely nested<br>
            > >> inside 'for' region; perhaps you forget to
            enclose 'omp for'<br>
            > >> directive into a parallel region?}}<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp simd<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> +#pragma omp for<br>
            > >> + šfor (int i = 0; i < 10; ++i) {<br>
            > >> +#pragma omp parallel<br>
            > >> + šfor (int i = 0; i < 10; ++i);<br>
            > >> + š}<br>
            > >> + šreturn foo<int>();<br>
            > >> +}<br>
            > >> +<br>
            > >><br>
            > >> Propchange:
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp<br>
            > >><br>
            > > <br>
            >
------------------------------------------------------------------------------<br>
            > ><br>
            > >> š š š<a class="moz-txt-link-freetext" href="svn:eol-style">svn:eol-style</a> = native<br>
            > >><br>
            > >> Propchange:
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp<br>
            > >><br>
            > > <br>
            >
------------------------------------------------------------------------------<br>
            > ><br>
            > >> š š š<a class="moz-txt-link-freetext" href="svn:keywords">svn:keywords</a> = Author Date Id Rev URL<br>
            > >><br>
            > >> Propchange:
            cfe/trunk/test/OpenMP/nesting_of_regions.cpp<br>
            > >><br>
            > > <br>
            >
------------------------------------------------------------------------------<br>
            > ><br>
            > >> š š š<a class="moz-txt-link-freetext" href="svn:mime-type">svn:mime-type</a> = text/plain<br>
            > >><br>
            > >><br>
            > >><br>
            > >><br>
            > >> ------------------------------<br>
            > >><br>
            > > -------------- next part --------------<br>
            > > An HTML attachment was scrubbed...<br>
            > > URL: <<a moz-do-not-send="true"
              href="http://lists.cs.uiuc.edu/pipermail/cfe-commits/attachments/">http://lists.cs.uiuc.edu/pipermail/cfe-commits/attachments/</a><br>
            > 20140626/0739f9d2/attachment.html><br>
            > ><br>
            > > ------------------------------<br>
            > ><br>
            > > _______________________________________________<br>
            > > cfe-commits mailing list<br>
            > > <a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
            > > <a moz-do-not-send="true"
              href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
            > ><br>
            > ><br>
            > > End of cfe-commits Digest, Vol 84, Issue 504<br>
            > > ********************************************<br>
            > <br>
          </font></tt>
      </p>
    </blockquote>
    <br>
  </body>
</html>