Rakete1111 updated this revision to Diff 170828. Rakete1111 added a comment.
Addresed review comments :) I updated the dr status file but a lot of unrelated changes made it in. Is this okay? Repository: rC Clang https://reviews.llvm.org/D53595 Files: include/clang/Basic/DiagnosticSemaKinds.td include/clang/Sema/Sema.h lib/Sema/SemaLambda.cpp test/CXX/drs/dr22xx.cpp test/SemaCXX/warn-shadow-in-lambdas.cpp www/cxx_dr_status.html
Index: www/cxx_dr_status.html =================================================================== --- www/cxx_dr_status.html +++ www/cxx_dr_status.html @@ -7437,11 +7437,11 @@ <td>Brace elision in array temporary initialization</td> <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="1271"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1271">1271</a></td> - <td>drafting</td> + <tr id="1271"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1271">1271</a></td> + <td>DR</td> <td>Imprecise wording regarding dependent types</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr id="1272"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#1272">1272</a></td> @@ -11147,7 +11147,7 @@ </tr> <tr class="open" id="1889"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1889">1889</a></td> - <td>open</td> + <td>drafting</td> <td>Unclear effect of <TT>#pragma</TT> on conformance</td> <td align="center">Not resolved</td> </tr> @@ -11170,8 +11170,8 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="1893"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1893">1893</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1893">1893</a></td> + <td>DR</td> <td>Function-style cast with <I>braced-init-list</I>s and empty pack expansions</td> <td class="none" align="center">Unknown</td> </tr> @@ -11247,11 +11247,11 @@ <td>Dependent types and injected-class-names</td> <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="1906"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1906">1906</a></td> - <td>review</td> + <tr id="1906"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#1906">1906</a></td> + <td>NAD</td> <td>Name lookup in member <TT>friend</TT> declaration</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="1907"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1907">1907</a></td> @@ -11272,8 +11272,8 @@ <td class="full" align="center">Yes</td> </tr> <tr id="1910"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1910">1910</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1910">1910</a></td> + <td>DR</td> <td>“Shall” requirement applied to runtime behavior</td> <td class="none" align="center">Unknown</td> </tr> @@ -11710,8 +11710,8 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="1983"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1983">1983</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1983">1983</a></td> + <td>DR</td> <td>Inappropriate use of <I>virt-specifier</I></td> <td class="none" align="center">Unknown</td> </tr> @@ -12166,8 +12166,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2059"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2059">2059</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2059">2059</a></td> + <td>DR</td> <td>Linkage and deduced return types</td> <td class="none" align="center">Unknown</td> </tr> @@ -12298,8 +12298,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2081"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2081">2081</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2081">2081</a></td> + <td>DR</td> <td>Deduced return type in redeclaration or specialization of function template</td> <td class="none" align="center">Unknown</td> </tr> @@ -12340,8 +12340,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2088"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2088">2088</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2088">2088</a></td> + <td>DR</td> <td>Late tiebreakers in partial ordering</td> <td class="none" align="center">Unknown</td> </tr> @@ -12364,8 +12364,8 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="2092"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2092">2092</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2092">2092</a></td> + <td>DR</td> <td>Deduction failure and overload resolution</td> <td class="none" align="center">Unknown</td> </tr> @@ -12796,8 +12796,8 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="2164"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2164">2164</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2164">2164</a></td> + <td>DR</td> <td>Name hiding and <I>using-directive</I>s</td> <td class="none" align="center">Unknown</td> </tr> @@ -12935,7 +12935,7 @@ </tr> <tr class="open" id="2187"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2187">2187</a></td> - <td>open</td> + <td>drafting</td> <td>Protected members and access via <I>qualified-id</I></td> <td align="center">Not resolved</td> </tr> @@ -13025,7 +13025,7 @@ </tr> <tr class="open" id="2202"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2202">2202</a></td> - <td>open</td> + <td>drafting</td> <td>When does default argument instantiation occur?</td> <td align="center">Not resolved</td> </tr> @@ -13081,7 +13081,7 @@ <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2211">2211</a></td> <td>C++17</td> <td>Hiding by lambda captures and parameters</td> - <td class="none" align="center">Unknown</td> + <td class="svn" align="center">SVN</td> </tr> <tr class="open" id="2212"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2212">2212</a></td> @@ -13127,7 +13127,7 @@ </tr> <tr class="open" id="2219"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2219">2219</a></td> - <td>open</td> + <td>drafting</td> <td>Dynamically-unreachable handlers</td> <td align="center">Not resolved</td> </tr> @@ -13168,14 +13168,14 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="2226"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2226">2226</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2226">2226</a></td> + <td>DR</td> <td>Xvalues vs lvalues in conditional expressions</td> <td class="none" align="center">Unknown</td> </tr> <tr id="2227"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2227">2227</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2227">2227</a></td> + <td>DR</td> <td>Destructor access and default member initializers</td> <td class="none" align="center">Unknown</td> </tr> @@ -13186,8 +13186,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2229"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2229">2229</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2229">2229</a></td> + <td>DR</td> <td>Volatile unnamed bit-fields</td> <td class="full" align="center">Clang 7</td> </tr> @@ -13216,14 +13216,14 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="2234"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2234">2234</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2234">2234</a></td> + <td>DR</td> <td>Missing rules for <I>simple-template-id</I> as <I>class-name</I></td> <td class="none" align="center">Unknown</td> </tr> <tr id="2235"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2235">2235</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2235">2235</a></td> + <td>DR</td> <td>Partial ordering and non-dependent types</td> <td class="none" align="center">Unknown</td> </tr> @@ -13234,8 +13234,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2237"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2237">2237</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2237">2237</a></td> + <td>accepted</td> <td>Can a <I>template-id</I> name a constructor?</td> <td class="none" align="center">Unknown</td> </tr> @@ -13253,15 +13253,15 @@ </tr> <tr class="open" id="2240"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2240">2240</a></td> - <td>open</td> + <td>drafting</td> <td><TT>this</TT> is not odr-used in a constant expression</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2241"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2241">2241</a></td> - <td>open</td> + <tr id="2241"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2241">2241</a></td> + <td>DR</td> <td>Overload resolution is not invoked with a single function</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2242"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2242">2242</a></td> @@ -13283,13 +13283,13 @@ </tr> <tr class="open" id="2245"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2245">2245</a></td> - <td>open</td> + <td>drafting</td> <td>Point of instantiation of incomplete class template</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2246"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2246">2246</a></td> - <td>open</td> + <td>drafting</td> <td>Access of indirect virtual base class constructors</td> <td align="center">Not resolved</td> </tr> @@ -13325,7 +13325,7 @@ </tr> <tr class="open" id="2252"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2252">2252</a></td> - <td>open</td> + <td>review</td> <td>Enumeration list-initialization from the same type</td> <td align="center">Not resolved</td> </tr> @@ -13337,25 +13337,25 @@ </tr> <tr id="2254"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2254">2254</a></td> - <td>tentatively ready</td> + <td>ready</td> <td>Standard-layout classes and bit-fields</td> <td class="none" align="center">Unknown</td> </tr> <tr id="2255"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2255">2255</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2255">2255</a></td> + <td>DR</td> <td>Instantiated static data member templates</td> <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2256"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2256">2256</a></td> - <td>open</td> + <td>drafting</td> <td>Lifetime of trivially-destructible objects</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2257"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2257">2257</a></td> - <td>open</td> + <td>drafting</td> <td>Lifetime extension of references vs exceptions</td> <td align="center">Not resolved</td> </tr> @@ -13372,14 +13372,14 @@ <td class="none" align="center">Unknown</td> </tr> <tr id="2260"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2260">2260</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2260">2260</a></td> + <td>DR</td> <td>Explicit specializations of deleted member functions</td> <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2261"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2261">2261</a></td> - <td>open</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2261">2261</a></td> + <td>extension</td> <td>Explicit instantiation of in-class <TT>friend</TT> definition</td> <td align="center">Not resolved</td> </tr> @@ -13391,31 +13391,31 @@ </tr> <tr class="open" id="2263"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2263">2263</a></td> - <td>open</td> + <td>drafting</td> <td>Default argument instantiation for <TT>friend</TT>s</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2264"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2264">2264</a></td> - <td>open</td> + <td>drafting</td> <td>Memberwise copying with indeterminate value</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2265"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2265">2265</a></td> - <td>open</td> + <td>drafting</td> <td>Delayed pack expansion and member redeclarations</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2266"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2266">2266</a></td> - <td>open</td> + <td>drafting</td> <td>Has dependent type vs is type-dependent</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2267"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2267">2267</a></td> - <td>open</td> + <td>drafting</td> <td>Copy-initialization of temporary in reference direct-initialization</td> <td align="center">Not resolved</td> </tr> @@ -13481,7 +13481,7 @@ </tr> <tr class="open" id="2278"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2278">2278</a></td> - <td>open</td> + <td>drafting</td> <td>Copy elision in constant expressions reconsidered</td> <td align="center">Not resolved</td> </tr> @@ -13499,7 +13499,7 @@ </tr> <tr class="open" id="2281"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2281">2281</a></td> - <td>open</td> + <td>drafting</td> <td>Consistency of aligned <TT>operator delete</TT> replacement</td> <td align="center">Not resolved</td> </tr> @@ -13569,17 +13569,17 @@ <td><I>simple-template-id</I> is ambiguous between <I>class-name</I> and <I>type-name</I></td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2293"> + <tr id="2293"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2293">2293</a></td> - <td>drafting</td> + <td>ready</td> <td>Requirements for <I>simple-template-id</I> used as a <I>class-name</I></td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2294"> + <tr id="2294"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2294">2294</a></td> - <td>drafting</td> + <td>ready</td> <td>Dependent <TT>auto</TT> static data members</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2295"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2295">2295</a></td> @@ -13606,8 +13606,8 @@ <td align="center">Not resolved</td> </tr> <tr id="2299"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2299">2299</a></td> - <td>tentatively ready</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2299">2299</a></td> + <td>DR</td> <td><TT>constexpr</TT> vararg functions</td> <td class="none" align="center">Unknown</td> </tr> @@ -13631,7 +13631,7 @@ </tr> <tr class="open" id="2303"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2303">2303</a></td> - <td>open</td> + <td>drafting</td> <td>Partial ordering and recursive variadic inheritance</td> <td align="center">Not resolved</td> </tr> @@ -13659,11 +13659,11 @@ <td>Unclear definition of “equivalent to a nontype template parameter”</td> <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2308"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2308">2308</a></td> - <td>open</td> + <tr id="2308"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2308">2308</a></td> + <td>NAD</td> <td>Structured bindings and lambda capture</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2309"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2309">2309</a></td> @@ -13673,7 +13673,7 @@ </tr> <tr class="open" id="2310"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2310">2310</a></td> - <td>open</td> + <td>drafting</td> <td>Type completeness and derived-to-base pointer conversions</td> <td align="center">Not resolved</td> </tr> @@ -13683,11 +13683,11 @@ <td>Missed case for guaranteed copy elision</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2312"> + <tr id="2312"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2312">2312</a></td> - <td>drafting</td> + <td>ready</td> <td>Structured bindings and <TT>mutable</TT></td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr id="2313"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2313">2313</a></td> @@ -13715,7 +13715,7 @@ </tr> <tr class="open" id="2317"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2317">2317</a></td> - <td>open</td> + <td>drafting</td> <td>Self-referential default member initializers</td> <td align="center">Not resolved</td> </tr> @@ -13737,23 +13737,23 @@ <td><TT>constexpr if</TT> and boolean conversions</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2321"> + <tr id="2321"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2321">2321</a></td> - <td>drafting</td> + <td>ready</td> <td>Conditional operator and cv-qualified class prvalues</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2322"> + <tr id="2322"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2322">2322</a></td> - <td>drafting</td> + <td>ready</td> <td>Substitution failure and lexical order</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2323"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2323">2323</a></td> - <td>drafting</td> + <tr id="2323"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2323">2323</a></td> + <td>accepted</td> <td>Expunge POD</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2324"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2324">2324</a></td> @@ -13845,11 +13845,11 @@ <td>Undefined behavior converting to short enums with fixed underlying types</td> <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2339"> + <tr id="2339"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2339">2339</a></td> - <td>drafting</td> + <td>ready</td> <td>Underspecified template arguments in structured bindings</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2340"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2340">2340</a></td> @@ -13870,68 +13870,68 @@ <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2343"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2343">2343</a></td> - <td>open</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2343">2343</a></td> + <td>extension</td> <td><TT>void*</TT> non-type template parameters</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2344"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2344">2344</a></td> - <td>open</td> + <td>drafting</td> <td>Redeclaration of names in <I>init-statement</I>s</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2345"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2345">2345</a></td> - <td>open</td> + <td>review</td> <td>Jumping across initializers in <I>init-statement</I>s and <I>condition</I>s</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2346"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2346">2346</a></td> - <td>open</td> + <tr id="2346"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2346">2346</a></td> + <td>DR</td> <td>Local variables in default arguments</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2347"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2347">2347</a></td> <td>open</td> <td>Passing short scoped enumerations to ellipsis</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2348"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2348">2348</a></td> - <td>open</td> + <tr id="2348"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2348">2348</a></td> + <td>NAD</td> <td>Non-templated <TT>constexpr if</TT></td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> - <tr class="open" id="2349"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2349">2349</a></td> - <td>open</td> + <tr id="2349"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2349">2349</a></td> + <td>NAD</td> <td>Class/enumeration names vs conditions</td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2350"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2350">2350</a></td> <td>open</td> <td>Forwarding references and deduction guides</td> <td align="center">Not resolved</td> </tr> - <tr class="open" id="2351"> + <tr id="2351"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2351">2351</a></td> - <td>open</td> + <td>tentatively ready</td> <td><TT>void{}</TT></td> - <td align="center">Not resolved</td> + <td class="none" align="center">Unknown</td> </tr> <tr class="open" id="2352"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2352">2352</a></td> - <td>open</td> + <td>drafting</td> <td>Similar types and reference binding</td> <td align="center">Not resolved</td> </tr> <tr class="open" id="2353"> <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2353">2353</a></td> - <td>open</td> + <td>drafting</td> <td>Potential results of a member access expression for a static data member</td> <td align="center">Not resolved</td> </tr> @@ -13942,8 +13942,8 @@ <td align="center">Not resolved</td> </tr> <tr class="open" id="2355"> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2355">2355</a></td> - <td>open</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2355">2355</a></td> + <td>extension</td> <td>Deducing <I>noexcept-specifier</I>s</td> <td align="center">Not resolved</td> </tr> @@ -13953,6 +13953,60 @@ <td>Base class copy and move constructors should not be inherited</td> <td class="none" align="center">Unknown</td> </tr> + <tr class="open" id="2357"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2357">2357</a></td> + <td>open</td> + <td>Lookup in member function declarations</td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2358"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2358">2358</a></td> + <td>drafting</td> + <td>Explicit capture of value</td> + <td align="center">Not resolved</td> + </tr> + <tr id="2359"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2359">2359</a></td> + <td>tentatively ready</td> + <td>Unintended copy initialization with designated initializers</td> + <td class="none" align="center">Unknown</td> + </tr> + <tr class="open" id="2360"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2360">2360</a></td> + <td>open</td> + <td><TT>[[maybe_unused]]</TT> and structured bindings</td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2361"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2361">2361</a></td> + <td>open</td> + <td>Unclear description of <TT>longjmp</TT> undefined behavior</td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2362"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2362">2362</a></td> + <td>open</td> + <td><TT>__func__</TT> should be <TT>constexpr</TT></td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2363"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2363">2363</a></td> + <td>open</td> + <td>Opaque enumeration friend declarations</td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2364"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2364">2364</a></td> + <td>open</td> + <td>Constant expressions, aggregate initialization, and modifications</td> + <td align="center">Not resolved</td> + </tr> + <tr class="open" id="2365"> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2365">2365</a></td> + <td>open</td> + <td>Confusing specification for <TT>dynamic_cast</TT></td> + <td align="center">Not resolved</td> + </tr> </table> </div> Index: test/SemaCXX/warn-shadow-in-lambdas.cpp =================================================================== --- test/SemaCXX/warn-shadow-in-lambdas.cpp +++ test/SemaCXX/warn-shadow-in-lambdas.cpp @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -std=c++14 -verify -fsyntax-only -Wshadow -D AVOID %s // RUN: %clang_cc1 -std=c++14 -verify -fsyntax-only -Wshadow -Wshadow-uncaptured-local %s // RUN: %clang_cc1 -std=c++14 -verify -fsyntax-only -Wshadow-all %s +// RUN: %clang_cc1 -std=c++17 -verify -fsyntax-only -Wshadow-all %s void foo(int param) { // expected-note 1+ {{previous declaration is here}} int var = 0; // expected-note 1+ {{previous declaration is here}} @@ -79,7 +80,7 @@ int var = 1; // expected-warning {{declaration shadows a local variable}} }; auto f2 = [param] // expected-note {{variable 'param' is explicitly captured here}} - (int param) { ; }; // expected-warning {{declaration shadows a local variable}} + (int param) { ; }; // expected-error {{a lambda parameter cannot shadow an explicitly captured entity}} } // Warn for variables defined in the capture list. @@ -135,7 +136,7 @@ auto g2 = [=](auto param) { ; }; // expected-warning {{declaration shadows a local variable}} #endif auto g3 = [param] // expected-note {{variable 'param' is explicitly captured here}} - (auto param) { ; }; // expected-warning {{declaration shadows a local variable}} + (auto param) { ; }; // expected-error {{a lambda parameter cannot shadow an explicitly captured entity}} } void avoidWarningWhenRedefining() { Index: test/CXX/drs/dr22xx.cpp =================================================================== --- test/CXX/drs/dr22xx.cpp +++ test/CXX/drs/dr22xx.cpp @@ -15,3 +15,14 @@ const volatile unsigned i3 : 1; }; } + +#if __cplusplus >= 201103L +namespace dr2211 { // dr2211: 8 +void f() { + int a; + auto f = [a](int a) { (void)a; }; // expected-error {{a lambda parameter cannot shadow an explicitly captured entity}} + // expected-note@-1{{variable 'a' is explicitly captured here}} + auto g = [=](int a) { (void)a; }; +} +} +#endif Index: lib/Sema/SemaLambda.cpp =================================================================== --- lib/Sema/SemaLambda.cpp +++ lib/Sema/SemaLambda.cpp @@ -493,15 +493,29 @@ LSI->finishedExplicitCaptures(); } -void Sema::addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope) { +void Sema::addLambdaParameters( + ArrayRef<LambdaIntroducer::LambdaCapture> Captures, + CXXMethodDecl *CallOperator, Scope *CurScope) { // Introduce our parameters into the function scope for (unsigned p = 0, NumParams = CallOperator->getNumParams(); p < NumParams; ++p) { ParmVarDecl *Param = CallOperator->getParamDecl(p); // If this has an identifier, add it to the scope stack. if (CurScope && Param->getIdentifier()) { - CheckShadow(CurScope, Param); + bool Error = false; + // Resolution of CWG 2211 in C++17 renders shadowing ill-formed, but we + // retroactively apply it. + for (const auto &Capture : Captures) { + if (Capture.Id == Param->getIdentifier()) { + Error = true; + Diag(Param->getLocation(), diag::err_parameter_shadow_capture); + Diag(Capture.Loc, diag::note_var_explicitly_captured_here) + << Capture.Id << true; + } + } + if (!Error) + CheckShadow(CurScope, Param); PushOnScopeChains(Param, CurScope); } @@ -1142,7 +1156,7 @@ LSI->ContainsUnexpandedParameterPack = ContainsUnexpandedParameterPack; // Add lambda parameters into scope. - addLambdaParameters(Method, CurScope); + addLambdaParameters(Intro.Captures, Method, CurScope); // Enter a new evaluation context to insulate the lambda from any // cleanups from the enclosing full-expression. Index: include/clang/Sema/Sema.h =================================================================== --- include/clang/Sema/Sema.h +++ include/clang/Sema/Sema.h @@ -5580,7 +5580,9 @@ void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI); /// Introduce the lambda parameters into scope. - void addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope); + void addLambdaParameters( + ArrayRef<LambdaIntroducer::LambdaCapture> Captures, + CXXMethodDecl *CallOperator, Scope *CurScope); /// Deduce a block or lambda's return type based on the return /// statements present in the body. Index: include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- include/clang/Basic/DiagnosticSemaKinds.td +++ include/clang/Basic/DiagnosticSemaKinds.td @@ -6630,6 +6630,10 @@ def ext_star_this_lambda_capture_cxx17 : ExtWarn< "capture of '*this' by copy is a C++17 extension">, InGroup<CXX17>; + // C++17 parameter shadows capture + def err_parameter_shadow_capture : Error< + "a lambda parameter cannot shadow an explicitly captured entity">; + // C++2a [=, this] captures. def warn_cxx17_compat_equals_this_lambda_capture : Warning< "explicit capture of 'this' with a capture default of '=' is incompatible "
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits