On 31/05/2014 00:53, Eli Bendersky wrote:



On Fri, May 30, 2014 at 2:43 PM, Richard Smith <[email protected] <mailto:[email protected]>> wrote:

    On Thu, May 29, 2014 at 6:33 AM, Aaron Ballman
    <[email protected] <mailto:[email protected]>> wrote:

        When setting language option defaults, -std overrides -x for
        CUDA and
        OpenCL when it should not. For instance, passing -x cuda
        -std=c++11,
        the CUDA language option would never be set, and so CUDA
        functionality
        would be disabled. This patch addresses that by setting the
        language
        option based on the -std or the input file kind.


    I feel like we're missing some part of the design here. We only
    have a single 'LangStandard' value active at once, but for (say)
    an OpenCL build, we need *both* an OpenCL standard *and* a C standard.


AFAIK, for OpenCL and CUDA at least, the version of the compute language standard implies the version of the C/C++ standard it supports

The standard may say so, but in practice there's value in allowing users to mix and match:

Apart from clearly useful modes like using OpenCL from C++ that nobody thought of, but happened to work when a user tried, there are less obvious benefits like early compatibility testing while new standards are in development.

Without that, any ambiguities or conflicts would remain theoretical until the relevant specifications have been standardized and enums updated in clang, by which time it'll be too late to specify the standard so that they're compatible with others.

My take on this is to treat language standards more like language extensions where possible (which is mostly already the case internally).

Alp.



, so having a tuple instead of just "opencl1.2" would be superfluous, no? OTOH we don't really support sub-versions of CUDA at this point.

Eli


    At the same time, we have a long-standing issue where setting up
    CFLAGS is difficult: there's no nice way to say "use C11 for C,
    and use C++11 for C++", because build systems usually use the C
    compilation flags plus some extra C++-specific flags for C++
    builds, so we cannot put -std=c11 into the C compilation flags
    (that makes the C++ builds fail).

    This suggests to me that our 'language standard' should perhaps be
    a tuple of all the relevant standards, so you could specify that
    you're using C89, C++11, OpenCL v1.2, Blocks v<whatever>, OpenMP
    v<whatever> ... for builds where those standards are relevant.




_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

--
http://www.nuanti.com
the browser experts

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to