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.
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