On November 25, 2015 3:33:47 PM GMT+01:00, Cesar Philippidis 
<ce...@codesourcery.com> wrote:
>On 10/20/2015 02:37 AM, Jakub Jelinek wrote:
>> On Fri, Oct 09, 2015 at 12:15:24PM +0200, Thomas Schwinge wrote:
>>> diff --git gcc/fortran/scanner.c gcc/fortran/scanner.c
>>> index bfb7d45..1e1ea84 100644
>>> --- gcc/fortran/scanner.c
>>> +++ gcc/fortran/scanner.c
>>> @@ -935,6 +935,63 @@ skip_free_comments (void)
>>>    return false;
>>>  }
>>>  
>>> +/* Return true if MP was matched in fixed form.  */
>>> +static bool
>>> +skip_omp_attribute_fixed (locus *start)
>> 
>> Technically, this isn't attribute, but sentinel.
>> So, skip_fixed_omp_sentinel?  I know the free functions
>> are called attribute, perhaps we should rename them too,
>> patch to do so preapproved.
>
>I've renamed those functions in this patch. The free variants are named
>skip_free_*_sentinel.
>
>>> +{
>>> +  gfc_char_t c;
>>> +  if (((c = next_char ()) == 'm' || c == 'M')
>>> +      && ((c = next_char ()) == 'p' || c == 'P'))
>>> +    {
>>> +      c = next_char ();
>>> +      if (c != '\n'
>>> +     && (continue_flag
>> 
>> The original code checked here
>>      (openmp_flag && continue_flag)
>> instead.  Is that change intentional?
>
>I think so. Without it, continuations won't work with -fopenmp-simd.
>Note how that function call is guarded by
>
>  if ((flag_openmp || flag_openmp_simd) && !flag_openacc)
>
>> Looking around, we probably don't have a testcase coverage for say
>> fixed form:
>> 
>> C*OMP+PARALLEL DO
>> do ...
>
>That's going to be tricky. In fixed mode, the only way that we can tell
>if there is an omp/acc continuation is by inspecting the character at
>position 6. So, there could be a comment like
>
>C*ACCELERATOR
>
>which would get picked up as an acc continuation.
>
>> (i.e. where it starts with an OpenMP (or OpenACC) continuation,
>without
>> non-continued line first), or for free form where:
>> 
>> something &
>> !$omp & parallel
>> 
>> (ditto for OpenACC).
>
>What type of error should this be reporting? Right now it does report
>an
>error because this gets expanded to
>
>something parallel
>
>That's clearly not correct. But at the same time, it would still be an
>error if the user placed !$omp/acc between a continuation.
>
>>> +     while (gfc_is_whitespace (c));

gfc_gobble_whitespace () ?
TIA,

PS: this thread has the relevant citations from the openmp standard, in case 
https://gcc.gnu.org/ml/fortran/2007-02/msg00312.html
I didn't look to see what acc says in this regard.

>>> +     if (c != '\n' && c != '!')
>>> +       {
>>> +         /* Canonicalize to *$omp.  */
>> 
>> The comment has a pasto, by storing * you canonicalize to *$acc.
>
>Fixed.


Reply via email to