On 11/2/18 3:34 PM, Mike Gulick wrote:
> On 11/2/18 5:13 PM, David Malcolm wrote:
>> On Thu, 2018-11-01 at 11:56 -0400, Mike Gulick wrote:
>>> 2018-10-31  Mike Gulick  <mgul...@mathworks.com>
>>>
>>>     PR preprocessor/83173
>>>     * libcpp/files.c (_cpp_stack_include): Check if
>>>     line_table->highest_location is past current line before
>>>     decrementing.
>>> ---
>>>  libcpp/files.c | 32 +++++++++++++++++++++++---------
>>>  1 file changed, 23 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/libcpp/files.c b/libcpp/files.c
>>> index 08b7c647c91..c0165fe64e4 100644
>>> --- a/libcpp/files.c
>>> +++ b/libcpp/files.c
>>> @@ -1012,6 +1012,7 @@ _cpp_stack_include (cpp_reader *pfile, const
>>> char *fname, int angle_brackets,
>>>    struct cpp_dir *dir;
>>>    _cpp_file *file;
>>>    bool stacked;
>>> +  bool decremented = false;
>>>  
>>>    /* For -include command-line flags we have type == IT_CMDLINE.
>>>       When the first -include file is processed we have the case,
>>> where
>>> @@ -1035,20 +1036,33 @@ _cpp_stack_include (cpp_reader *pfile, const
>>> char *fname, int angle_brackets,
>>>      return false;
>>>  
>>>    /* Compensate for the increment in linemap_add that occurs if
>>> -      _cpp_stack_file actually stacks the file.  In the case of a
>>> -     normal #include, we're currently at the start of the line
>>> -     *following* the #include.  A separate source_location for this
>>> -     location makes no sense (until we do the LC_LEAVE), and
>>> -     complicates LAST_SOURCE_LINE_LOCATION.  This does not apply if
>>> we
>>> -     found a PCH file (in which case linemap_add is not called) or
>>> we
>>> -     were included from the command-line.  */
>>> +     _cpp_stack_file actually stacks the file.  In the case of a
>>> normal
>>> +     #include, we're currently at the start of the line *following*
>>> the
>>> +     #include.  A separate source_location for this location makes
>>> no
>>> +     sense (until we do the LC_LEAVE), and complicates
>>> +     LAST_SOURCE_LINE_LOCATION.  This does not apply if we found a
>>> PCH
>>> +     file (in which case linemap_add is not called) or we were
>>> included
>>> +     from the command-line.  In the case that the #include is the
>>> last
>>> +     line in the file, highest_location still points to the current
>>> +     line, not the start of the next line, so we do not decrement in
>>> +     this case.  See plugin/location-overflow-test-pr83173.h for an
>>> +     example.  */
>>>    if (file->pchname == NULL && file->err_no == 0
>>>        && type != IT_CMDLINE && type != IT_DEFAULT)
>>> -    pfile->line_table->highest_location--;
>>> +    {
>>> +      int highest_line = linemap_get_expansion_line (pfile-
>>>> line_table,
>>> +                                                pfile-
>>>> line_table->highest_location);
>>> +      int source_line = linemap_get_expansion_line (pfile-
>>>> line_table, loc);
>>> +      if (highest_line > source_line)
>>> +   {
>>> +     pfile->line_table->highest_location--;
>>> +     decremented = true;
>>> +   }
>>> +    }
>>>  
>>>    stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT, loc);
>>>  
>>> -  if (!stacked)
>>> +  if (decremented && !stacked)
>>>      /* _cpp_stack_file didn't stack the file, so let's rollback the
>>>         compensation dance we performed above.  */
>>>      pfile->line_table->highest_location++;
>>
>> Sorry for the belated response.
>>
>> This is OK for trunk (assuming your contributor paperwork is in place).
>>
>> Thanks
>> Dave
>>
> Thanks Dave.  I don't have contributor paperwork in place for gcc.  I was 
> under the impressed the request needed to be initiated by a maintainer, but 
> if I can make the request myself let me know and I will do so.  I do have an 
> employer copyright disclaimer already approved which includes gcc, so the 
> process should be quick.
Contact ass...@gnu.org and indicate to them you need a past and future
copyright assignment for GCC.

jeff

Reply via email to