<div dir="ltr"><div style>LGTM with nits fixed.</div><div><br></div><div>--- lib/Sema/SemaDecl.cpp<span class="" style="white-space:pre"> </span>(revision 182601)</div><div>+++ lib/Sema/SemaDecl.cpp<span class="" style="white-space:pre"> </span>(working copy)</div>
<div>@@ -10680,10 +10680,14 @@</div><div>       // C++ [class.union]p1: If a union contains a member of reference type,<br></div><div>-      // the program is ill-formed.</div><div>+      // the program is ill-formed.  Except when compiling with MSVC extensions</div>
<div>+      // enabled.</div><div><br></div><div style>This should be a complete sentence.</div><div><br></div><div>       if (EltTy->isReferenceType()) {</div><div>-        Diag(NewFD->getLocation(), diag::err_union_member_of_reference_type)</div>
<div>+        Diag(NewFD->getLocation(), getLangOpts().MicrosoftExt ? </div><div style><br></div><div style>^ trailing space</div><div style><br></div><div>+                                    diag::ext_union_member_of_reference_type :</div>
<div>+                                    diag::err_union_member_of_reference_type)</div><div>           << NewFD->getDeclName() << EltTy;</div><div>+        if (!getLangOpts().MicrosoftExt)</div><div>         NewFD->setInvalidDecl();</div>
<div><br></div><div style>NewFD->setInvalidDecl() needs to be indented.</div><div><br></div><div>       }</div><div>     }</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 30, 2013 at 9:36 AM, Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Microsoft has a language extension which allows union members to be<br>
references.  What's more, they use this language extension in their<br>
ATL header files (which come as part of MFC and the Win32 SDK).<br>
Basically, they have code like this:<br>
<br>
struct s {<br>
  union {<br>
     foo *fp;<br>
     foo &fr;<br>
    };<br>
<br>
    s( foo &f ) : fr( f ) {}<br>
    s( foo *f ) : fp( f ) {}<br>
};<br>
<br>
This patch enables support for union members to be references when<br>
compiling with Microsoft extensions, and addresses PR13737.<br>
<span class="HOEnZb"><font color="#888888"><br>
~Aaron<br>
</font></span><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>