[patch, clang-cl] Implement /Zc:trigraphs support, disable trigraphs by default

Nico Weber thakis at chromium.org
Sat Dec 20 11:16:35 PST 2014


Thanks! All done.

On Fri, Dec 19, 2014 at 6:47 PM, Richard Smith <richard at metafoo.co.uk>
wrote:

> On Fri, Dec 19, 2014 at 6:08 PM, Nico Weber <thakis at chromium.org> wrote:
>>
>> Forgot to say: Fixes PR21974.
>>
>> On Fri, Dec 19, 2014 at 6:07 PM, Nico Weber <thakis at chromium.org> wrote:
>>
>>> Hi,
>>>
>>> the attached patch disables trigraphs by default in clang-cl mode. To do
>>> so, I'm renaming the cc1 trigraph flag to -ftrigraphs, and I'm adding a
>>> -fno-trigraphs flag. (This requires updating a handful of cc1 tests, and
>>> translating -trigraphs to -ftrigraphs in the driver.)
>>>
>>> The driver grows parsing logic for /Zc:, everything other than trigraphs
>>> is ignored for now. (We probably want to implement at least /Zc:inline at
>>> some point, which is why I added parsing code for this instead of always
>>> sending -fno-trigraphs to cc1 in clang-cl mode.)
>>>
>>
> -def trigraphs : Flag<["-", "--"], "trigraphs">, Flags<[CC1Option]>,
> +def trigraphs : Flag<["-", "--"], "trigraphs">, Flags<[DriverOption]>,
>
> I don't think DriverOption is right here; that means we don't forward the
> flag to a gcc invocation. Now, we never invoke GCC for C-like languages any
> more, but if we did, this would be wrong (and for all I know, it's wrong
> for Fortran...). You should be able to just drop the Flags.
>
>
>      if (Arg *A = Args.getLastArg(options::OPT_std_EQ, options::OPT_ansi,
> -                                 options::OPT_trigraphs))
> -      if (A != Std)
> +                                 options::OPT_trigraphs)) {
> +      if (A->getOption().matches(options::OPT_trigraphs))
> +        CmdArgs.push_back("-ftrigraphs");
> +      else if (A != Std)
>          A->render(Args, CmdArgs);
>
> Std here is Args.getLastArg(options::OPT_std_EQ, options::OPT_ansi), so
> your 'else if' clause is unreachable. Something like this would be simpler
> and more obvious:
>
> // If -trigraphs appears after the language standard flag, honor it.
> if (Args.getLastArg(options::OPT_std_EQ, options::OPT_ansi,
> options::OPT_trigraphs) != Std)
>   CmdArgs.push_back("-ftrigraphs");
>
> You could even sink this below the 'if (Std)' block to avoid duplicating
> it between the cases where we do and don't have a Std flag.
>
> Ok?
>>>
>>> Nico
>>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141220/fc82851a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang-cl-trigraphs.patch
Type: application/octet-stream
Size: 11451 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141220/fc82851a/attachment.obj>


More information about the cfe-commits mailing list