<p dir="ltr">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.</p>
<div class="gmail_quote">On 3 Feb 2015 02:32, "Alexey Bataev" <<a href="mailto:a.bataev@hotmail.com">a.bataev@hotmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi rsmith,<br>
<br>
Some standard header files from MSVC2012 use 'mutable' on references, though it is directly prohibited by the standard.<br>
<br>
<a href="http://reviews.llvm.org/D7370" target="_blank">http://reviews.llvm.org/D7370</a><br>
<br>
Files:<br>
  lib/Sema/SemaDecl.cpp<br>
  test/SemaCXX/ms_mutable_reference_member.cpp<br>
<br>
Index: lib/Sema/SemaDecl.cpp<br>
===================================================================<br>
--- lib/Sema/SemaDecl.cpp<br>
+++ lib/Sema/SemaDecl.cpp<br>
@@ -12347,7 +12347,7 @@<br>
   // Check that 'mutable' is consistent with the type of the declaration.<br>
   if (!InvalidDecl && Mutable) {<br>
     unsigned DiagID = 0;<br>
-    if (T->isReferenceType())<br>
+    if (!getLangOpts().MSVCCompat && T->isReferenceType())<br>
       DiagID = diag::err_mutable_reference;<br>
     else if (T.isConstQualified())<br>
       DiagID = diag::err_mutable_const;<br>
Index: test/SemaCXX/ms_mutable_reference_member.cpp<br>
===================================================================<br>
--- test/SemaCXX/ms_mutable_reference_member.cpp<br>
+++ test/SemaCXX/ms_mutable_reference_member.cpp<br>
@@ -0,0 +1,14 @@<br>
+// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-compatibility<br>
+// expected-no-diagnostics<br>
+<br>
+struct S {<br>
+  mutable int &a;<br>
+  S(int &b) : a(b) {}<br>
+};<br>
+<br>
+int main() {<br>
+  int a = 0;<br>
+  const S s(a);<br>
+  s.a = 10;<br>
+  return s.a + a;<br>
+}<br>
<br>
EMAIL PREFERENCES<br>
  <a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div>