[PATCH] [MSVC2012] Allow 'mutable' references (fix for http://llvm.org/PR22444)
Bataev, Alexey
a.bataev at hotmail.com
Wed Feb 4 22:59:48 PST 2015
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 <a.bataev at hotmail.com
> <mailto:a.bataev at hotmail.com>> 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" <a.bataev at hotmail.com
>> <mailto:a.bataev at hotmail.com>> 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/
>>
>
>
More information about the cfe-commits
mailing list