I take this into account, thanks.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

05.02.2015 1:54, Richard Smith пишет:
On Tue, Feb 3, 2015 at 6:32 PM, Bataev, Alexey <[email protected] <mailto:[email protected]>> wrote:

    Hi Richard,
    MSVC cl compiler allows mutable references even in user code, not
    only in system header files. I checked it and both 2012, 2013
    accepts the code from the test.


That's beside the point. We're not trying to accept all the nonsense that MSVC accepts, only the extensions that are needed to get real code to work. Thus we would take patches for bugs/extensions that are used in system headers (and ideally these cases should still give errors if used outside system headers), and for bugs/extensions that are very common in user code.

    I'll add extension warning.

    Best regards,
    Alexey Bataev
    =============
    Software Engineer
    Intel Compiler Team

    03.02.2015 20:25, Richard Smith пишет:

    Please emit a warning when this extension is used. If we're only
    doing this to support a system header, you could even make it a
    DefaultError ExtWarn. Other than that, this looks fine.

    On 3 Feb 2015 02:32, "Alexey Bataev" <[email protected]
    <mailto:[email protected]>> wrote:

        Hi rsmith,

        Some standard header files from MSVC2012 use 'mutable' on
        references, though it is directly prohibited by the standard.

        http://reviews.llvm.org/D7370

        Files:
          lib/Sema/SemaDecl.cpp
          test/SemaCXX/ms_mutable_reference_member.cpp

        Index: lib/Sema/SemaDecl.cpp
        ===================================================================
        --- lib/Sema/SemaDecl.cpp
        +++ lib/Sema/SemaDecl.cpp
        @@ -12347,7 +12347,7 @@
           // Check that 'mutable' is consistent with the type of the
        declaration.
           if (!InvalidDecl && Mutable) {
             unsigned DiagID = 0;
        -    if (T->isReferenceType())
        +    if (!getLangOpts().MSVCCompat && T->isReferenceType())
               DiagID = diag::err_mutable_reference;
             else if (T.isConstQualified())
               DiagID = diag::err_mutable_const;
        Index: test/SemaCXX/ms_mutable_reference_member.cpp
        ===================================================================
        --- test/SemaCXX/ms_mutable_reference_member.cpp
        +++ test/SemaCXX/ms_mutable_reference_member.cpp
        @@ -0,0 +1,14 @@
        +// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-compatibility
        +// expected-no-diagnostics
        +
        +struct S {
        +  mutable int &a;
        +  S(int &b) : a(b) {}
        +};
        +
        +int main() {
        +  int a = 0;
        +  const S s(a);
        +  s.a = 10;
        +  return s.a + a;
        +}

        EMAIL PREFERENCES
        http://reviews.llvm.org/settings/panel/emailpreferences/





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

Reply via email to