<div dir="ltr">Hans, this should go into Clang 4.</div><div class="gmail_extra"><br><div class="gmail_quote">On 23 January 2017 at 15:14, Richard Smith via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Mon Jan 23 17:14:23 2017<br>
New Revision: 292847<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292847&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=292847&view=rev</a><br>
Log:<br>
PR31692: Don't mark a declaration as invalid if we haven't necessarily emitted a (user-visible) error.<br>
<br>
Added:<br>
    cfe/trunk/test/SemaCXX/cxx11-<wbr>default-member-initializers.<wbr>cpp<br>
Modified:<br>
    cfe/trunk/lib/Sema/<wbr>SemaDeclCXX.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/<wbr>SemaDeclCXX.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=292847&r1=292846&r2=292847&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/Sema/<wbr>SemaDeclCXX.cpp?rev=292847&r1=<wbr>292846&r2=292847&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Sema/<wbr>SemaDeclCXX.cpp (original)<br>
+++ cfe/trunk/lib/Sema/<wbr>SemaDeclCXX.cpp Mon Jan 23 17:14:23 2017<br>
@@ -12383,9 +12383,9 @@ ExprResult Sema::BuildCXXDefaultInitExpr<br>
   Diag(Loc, diag::err_in_class_<wbr>initializer_not_yet_parsed)<br>
       << OutermostClass << Field;<br>
   Diag(Field->getLocEnd(), diag::note_in_class_<wbr>initializer_not_yet_parsed);<br>
-<br>
-  // Don't diagnose this again.<br>
-  Field->setInvalidDecl();<br>
+  // Recover by marking the field invalid, unless we're in a SFINAE context.<br>
+  if (!isSFINAEContext())<br>
+    Field->setInvalidDecl();<br>
   return ExprError();<br>
 }<br>
<br>
<br>
Added: cfe/trunk/test/SemaCXX/cxx11-<wbr>default-member-initializers.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx11-default-member-initializers.cpp?rev=292847&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaCXX/cxx11-default-member-<wbr>initializers.cpp?rev=292847&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/cxx11-<wbr>default-member-initializers.<wbr>cpp (added)<br>
+++ cfe/trunk/test/SemaCXX/cxx11-<wbr>default-member-initializers.<wbr>cpp Mon Jan 23 17:14:23 2017<br>
@@ -0,0 +1,14 @@<br>
+// RUN: %clang_cc1 -std=c++11 -verify %s -pedantic<br>
+<br>
+namespace PR31692 {<br>
+  struct A {<br>
+    struct X { int n = 0; } x;<br>
+    // Trigger construction of X() from a SFINAE context. This must not mark<br>
+    // any part of X as invalid.<br>
+    static_assert(!__is_<wbr>constructible(X), "");<br>
+    // Check that X::n is not marked invalid.<br>
+    double &r = x.n; // expected-error {{non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'}}<br>
+  };<br>
+  // A::X can now be default-constructed.<br>
+  static_assert(__is_<wbr>constructible(A::X), "");<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>