<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, May 4, 2014 at 4:53 AM, Adam Strzelecki <span dir="ltr"><<a href="mailto:ono@java.pl" target="_blank">ono@java.pl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
John, I kindly ask for an explanation of following change introduced by you in f6a164819:<br>
<br>
git diff f6a164819^! lib/Sema/SemaExpr.cpp<br>
<br>
+    // We don't want to throw lvalue-to-rvalue casts on top of<br>
+    // expressions of certain types in C++.<br>
+    if (getLangOptions().CPlusPlus &&<br>
+        (E->getType() == Context.OverloadTy ||<br>
+         T->isDependentType() ||<br>
+         T->isRecordType()))<br>
+      return;<br>
<br>
The problem with this change is that I explicitly request to use C style assignment (ignoring constructors) on POD type variable having `pod_assign` attribute, but condition above prevents proper cast to be emitted.<br></blockquote>
<div><br></div><div>You're trying to shoehorn non-C++ semantics into C++, so you're going to have a bad time. The above check is appropriate for C++ (CK_LValueToRValue is not something that should ever happen to a record type in C++, because that's not what the lvalue-to-rvalue conversion does on record types).</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So far I have simply disabled, since I no longer have direct access to the Entity (VarDecl) to check for PODAssignAttrt, but I am not sure what are consequences of such step.<br>
<br>
FYI:<br>
<br>
<a href="https://github.com/ujhpc/clang/commit/61823c2bc5be78f793bdc8c11365d2bcb50455cc" target="_blank">https://github.com/ujhpc/clang/commit/61823c2bc5be78f793bdc8c11365d2bcb50455cc</a><br>
<br>
+++ b/lib/Sema/SemaInit.cpp<br>
@@ -4599,6 +4599,10 @@ void InitializationSequence::InitializeFrom(Sema &S,<br>
<br>
   //     - If the destination type is a (possibly cv-qualified) class type:<br>
   if (DestType->isRecordType()) {<br>
+    if (Entity.getDecl()->hasAttr<PODAssignAttr>()) {<br>
+      AddCAssignmentStep(DestType);<br>
+      return;<br>
+    }<br>
<br>
Regards,<br>
<span class="HOEnZb"><font color="#888888">--<br>
Adam<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</font></span></blockquote></div><br></div></div>