[cfe-dev] clang::LangOption policy

Joshua Gerrard via cfe-dev cfe-dev at lists.llvm.org
Thu Oct 15 04:14:37 PDT 2015


Looking into things a bit more, it seems that MSVCCompat does a multitude
of things, so I don't think renaming it is the solution.
The best path I can see through this is for it to be separated out into
many more specific options, but this will break a *lot* of user code.

Given the sheer number of places it's used, this is probably best made in
an incremental manner. I can't justify the time for it at work, but I can
in my own, so I'll have to make a start on that tonight (assuming that path
of action is taken).

The LangOptions dump however, is useful for my work, so I can get the time
to do that.



--
Joshua Gerrard
JUCE Software Developer

*ROLI’s **award-winning*
<http://www.telegraph.co.uk/luxury/design/31520/the-seaboard-grand-piano-wins-designs-of-the-year-2014-award.html>*
Seaboard
GRAND, celebrated as the “**piano of the future*
<http://edition.cnn.com/2013/09/27/tech/innovation/hans-zimmer-seaboard-future-piano/>*”,
is now joined by the **Seaboard RISE*
<https://www.youtube.com/watch?v=fGr7VbDiRNw>*, “**every bit as slimline
and attractive as its bigger brother*
<http://www.soundonsound.com/news?NewsID=18726>*”. The press is hailing the
Seaboard RISE as “**innovative*
<http://www.wired.co.uk/news/archive/2015-09/10/seaboard-rise-digital-keyboard-launch-uk-price>*”,
“**expressive*
<http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
“**accessible*
<http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
and “**a keyboard controller that does to piano keys what 3D touch does to
the iPhone*
<http://www.slashgear.com/roli-seaboard-rise-is-like-3d-touch-for-musicians-11404216/>*”.
Now available for preorder at **www.roli.com* <http://www.roli.com/>*.*


On 15 October 2015 at 11:52, Joshua Gerrard <joshua.gerrard at roli.com> wrote:

> I think you've hit the nail on the head, MSVCCompat is poorly named in our
>> big sea of compatibility options.
>
>
> Glad you agree! I need to spend some time working out what it actually
> does in order to think of a better name now.
>
> What might be useful is adding a dump method to LangOptions which would
>> let you examine how particular invocations of clang/clang-cl have it
>> configured under different flags.
>
>
> It'll certainly be a start, yes. It'll also be a good way for me to get
> started contributing some source!
>
> I'll start poking around these two issues now.
>
>
> --
> Joshua Gerrard
> JUCE Software Developer
>
> *ROLI’s **award-winning*
> <http://www.telegraph.co.uk/luxury/design/31520/the-seaboard-grand-piano-wins-designs-of-the-year-2014-award.html>* Seaboard
> GRAND, celebrated as the “**piano of the future*
> <http://edition.cnn.com/2013/09/27/tech/innovation/hans-zimmer-seaboard-future-piano/>*”,
> is now joined by the **Seaboard RISE*
> <https://www.youtube.com/watch?v=fGr7VbDiRNw>*, “**every bit as slimline
> and attractive as its bigger brother*
> <http://www.soundonsound.com/news?NewsID=18726>*”. The press is hailing
> the Seaboard RISE as “**innovative*
> <http://www.wired.co.uk/news/archive/2015-09/10/seaboard-rise-digital-keyboard-launch-uk-price>*”,
> “**expressive*
> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
> “**accessible*
> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
> and “**a keyboard controller that does to piano keys what 3D touch does
> to the iPhone*
> <http://www.slashgear.com/roli-seaboard-rise-is-like-3d-touch-for-musicians-11404216/>*”.
> Now available for preorder at **www.roli.com* <http://www.roli.com/>*.*
>
>
> On 15 October 2015 at 11:35, David Majnemer <david.majnemer at gmail.com>
> wrote:
>
>>
>>
>> On Thu, Oct 15, 2015 at 3:24 AM, Joshua Gerrard <joshua.gerrard at roli.com>
>> wrote:
>>
>>> Yes, I meant MSCompatibilityVersion (sorry about that).
>>>
>>> I see your point about having the granularity available to the user;
>>> users not want some tweaks whilst still wanting others.
>>> However, it feels like a misnomer having a flag MSVCCompat that doesn't
>>> enable everything needed to compile the Windows headers. Perhaps this is a
>>> naming issue.
>>>
>>
>> I think you've hit the nail on the head, MSVCCompat is poorly named in
>> our big sea of compatibility options.
>>
>>
>>>
>>> Does clang-cl have a function I can call into to get the appropriate
>>> flags set (LangOptions and anything else that needs to be set)? If not, how
>>> would you feel about me adding one? I feel this would make developing an
>>> application that uses libclang for Windows easier, as you could simply
>>> point them to that function.
>>>
>>
>> What might be useful is adding a dump method to LangOptions which would
>> let you examine how particular invocations of clang/clang-cl have it
>> configured under different flags.
>>
>>
>>>
>>> Thanks for your input!
>>>
>>
>> Happy to help :)
>>
>>
>>>
>>> --
>>> Joshua Gerrard
>>> JUCE Software Developer
>>>
>>> *ROLI’s **award-winning*
>>> <http://www.telegraph.co.uk/luxury/design/31520/the-seaboard-grand-piano-wins-designs-of-the-year-2014-award.html>* Seaboard
>>> GRAND, celebrated as the “**piano of the future*
>>> <http://edition.cnn.com/2013/09/27/tech/innovation/hans-zimmer-seaboard-future-piano/>*”,
>>> is now joined by the **Seaboard RISE*
>>> <https://www.youtube.com/watch?v=fGr7VbDiRNw>*, “**every bit as
>>> slimline and attractive as its bigger brother*
>>> <http://www.soundonsound.com/news?NewsID=18726>*”. The press is hailing
>>> the Seaboard RISE as “**innovative*
>>> <http://www.wired.co.uk/news/archive/2015-09/10/seaboard-rise-digital-keyboard-launch-uk-price>*”,
>>> “**expressive*
>>> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
>>> “**accessible*
>>> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
>>> and “**a keyboard controller that does to piano keys what 3D touch does
>>> to the iPhone*
>>> <http://www.slashgear.com/roli-seaboard-rise-is-like-3d-touch-for-musicians-11404216/>*”.
>>> Now available for preorder at **www.roli.com* <http://www.roli.com/>*.*
>>>
>>>
>>> On 15 October 2015 at 11:08, David Majnemer <david.majnemer at gmail.com>
>>> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Oct 15, 2015 at 12:59 AM, Joshua Gerrard via cfe-dev <
>>>> cfe-dev at lists.llvm.org> wrote:
>>>>
>>>>> So I've been working with clang as a library on Windows for a little
>>>>> while now, and I'm noticed a few things that I'd like to change, but in
>>>>> order to do so I need to know the "clang policy" for such things first.
>>>>>
>>>>> There is a flag, MSVCCompat, which as you probably know already,
>>>>> tweaks some things so that clang works better on Windows.
>>>>>
>>>>> However, other flags are required, such as DelayedTemplateParsing, in
>>>>> order for things to work. Now I understand that these need to be separate
>>>>> flags so that users on other platforms can enable things like
>>>>> DelayedTemplateParsing for other reasons, but as it stands enabling
>>>>> MSVCCompat doesn't make clang compatible with Windows.
>>>>>
>>>>> As a result, I'd like to fix this problem by making things like
>>>>> DelayedTemplateParsing take effect when MSVCCompat is turned on. However,
>>>>> this would make it so that the "implied" flags would essentially have no
>>>>> effect, and turning off DelayedTemplateParsing would not have any effect if
>>>>> MSVCCompat was turned off.
>>>>>
>>>>
>>>> I see our MSVC compatibility story a little differently.  We offer a
>>>> multitude of flags which control different aspects of compatibility with
>>>> MSVC:
>>>> -fms-extensions
>>>> -fms-compatibility
>>>> -fdelayed-template-parsing
>>>> -fms-compatibility-version/-fmsc-version
>>>> -fthreadsafe-statics
>>>> -relaxed-aliasing
>>>> /vd0, /vd1, /vd2
>>>> /vmg, /vmb, /vms, /vmv, /vmm
>>>> ...
>>>>
>>>> While many (all?) of these flags have some effect on language
>>>> conformance, there are perhaps two which have no discernible ABI impact
>>>> (outside of, say, SFINAE): -fms-compatibility and
>>>> -fdelayed-template-parsing.
>>>>
>>>> These two flags engage orthogonal pieces of our compatibility machinery
>>>> and the intent is to ask users of clang to enable the bare minimum they
>>>> need in the hopes that we would encourage authorship of code which is
>>>> portable and free of reliance on compiler quirks.  -fms-compatibility is
>>>> less bad than -fdelayed-template-parsing in my eyes in
>>>> that -fdelayed-template-parsing will result in ASTs which have way worse
>>>> fidelity.
>>>>
>>>> I think it is reasonable for tools like clang-cl to enable both flags
>>>> by default due to it's fundamental nature but I don't think that's a
>>>> decision we'd want to make for tools at large.
>>>>
>>>> At a rather fundamental level the tool really needs to know whether or
>>>> not it should run the frontend with /vd2 or /vmv, some information must be
>>>> supplied to us.  I would rather see tools actively make the decision to use
>>>> -fdelayed-template-parsing instead of get opted into it.
>>>>
>>>>
>>>>>
>>>>> Furthermore, I can't see the point in having both a MSCompatibility
>>>>> flag and a MSVCCompat flag; surely we should have one or the other?
>>>>>
>>>>
>>>> I can't seem to find MSCompatibility as an identifier in clang's
>>>> sources.  However, I can find the similarly named MSCompatibilityVersion.
>>>> MSCompatibilityVersion is intended to be useful outside of MSVCCompat:
>>>> clang emitting MSVC-style diagnostics when targeting non-MSVC platforms is
>>>> a not-uncommon thing; some versions of VisualStudio do the wrong thing and
>>>> MSCompatibilityVersion lets us know if we should work around them (see
>>>> Frontend/TextDiagnostic.cpp).
>>>>
>>>>
>>>>>
>>>>> How do you folks feel about this? I'd really like to make this my
>>>>> first contribution to clang.
>>>>>
>>>>> --
>>>>> Joshua Gerrard
>>>>> JUCE Software Developer
>>>>>
>>>>> *ROLI’s **award-winning*
>>>>> <http://www.telegraph.co.uk/luxury/design/31520/the-seaboard-grand-piano-wins-designs-of-the-year-2014-award.html>* Seaboard
>>>>> GRAND, celebrated as the “**piano of the future*
>>>>> <http://edition.cnn.com/2013/09/27/tech/innovation/hans-zimmer-seaboard-future-piano/>*”,
>>>>> is now joined by the **Seaboard RISE*
>>>>> <https://www.youtube.com/watch?v=fGr7VbDiRNw>*, “**every bit as
>>>>> slimline and attractive as its bigger brother*
>>>>> <http://www.soundonsound.com/news?NewsID=18726>*”. The press is
>>>>> hailing the Seaboard RISE as “**innovative*
>>>>> <http://www.wired.co.uk/news/archive/2015-09/10/seaboard-rise-digital-keyboard-launch-uk-price>*”,
>>>>> “**expressive*
>>>>> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
>>>>> “**accessible*
>>>>> <http://createdigitalmusic.com/2015/09/new-roli-instrument-wants-make-expressive-control-mainstream/>*”,
>>>>> and “**a keyboard controller that does to piano keys what 3D touch
>>>>> does to the iPhone*
>>>>> <http://www.slashgear.com/roli-seaboard-rise-is-like-3d-touch-for-musicians-11404216/>*”.
>>>>> Now available for preorder at **www.roli.com* <http://www.roli.com/>
>>>>> *.*
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> cfe-dev mailing list
>>>>> cfe-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151015/bee30ea7/attachment.html>


More information about the cfe-dev mailing list