Endill updated this revision to Diff 512365.
Endill added a comment.

Replace unary `&` with `__builtin_addressof()`. It prevents unnecessary 
template instantiation (presumably to find overloaded unary `&`), and make 
Clang compliant since 3.4


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147839/new/

https://reviews.llvm.org/D147839

Files:
  clang/test/CXX/drs/dr20xx.cpp
  clang/www/cxx_dr_status.html


Index: clang/www/cxx_dr_status.html
===================================================================
--- clang/www/cxx_dr_status.html
+++ clang/www/cxx_dr_status.html
@@ -11849,7 +11849,7 @@
     <td><a href="https://wg21.link/cwg2007";>2007</a></td>
     <td>CD6</td>
     <td>Argument-dependent lookup for <TT>operator=</TT></td>
-    <td class="partial" align="center">Partial</td>
+    <td class="full" align="center">Clang 3.4</td>
   </tr>
   <tr id="2008">
     <td><a href="https://wg21.link/cwg2008";>2008</a></td>
Index: clang/test/CXX/drs/dr20xx.cpp
===================================================================
--- clang/test/CXX/drs/dr20xx.cpp
+++ clang/test/CXX/drs/dr20xx.cpp
@@ -10,14 +10,13 @@
 #define static_assert(...) _Static_assert(__VA_ARGS__)
 #endif
 
-namespace dr2007 { // dr2007: partial
+namespace dr2007 { // dr2007: 3.4
 template<typename T> struct A { typename T::error e; };
 template<typename T> struct B { };
 B<A<void> > b1;
 B<A<void> > b2 = b1;
 int a = b2[0]; // expected-error {{does not provide a subscript operator}}
-// FIXME: the following code shouldn't instantiate A<void>.
-// int b = (&b2)->foo;
+int b = __builtin_addressof(b2)->foo; // expected-error {{no member}}
 }
 
 namespace dr2026 { // dr2026: 11


Index: clang/www/cxx_dr_status.html
===================================================================
--- clang/www/cxx_dr_status.html
+++ clang/www/cxx_dr_status.html
@@ -11849,7 +11849,7 @@
     <td><a href="https://wg21.link/cwg2007";>2007</a></td>
     <td>CD6</td>
     <td>Argument-dependent lookup for <TT>operator=</TT></td>
-    <td class="partial" align="center">Partial</td>
+    <td class="full" align="center">Clang 3.4</td>
   </tr>
   <tr id="2008">
     <td><a href="https://wg21.link/cwg2008";>2008</a></td>
Index: clang/test/CXX/drs/dr20xx.cpp
===================================================================
--- clang/test/CXX/drs/dr20xx.cpp
+++ clang/test/CXX/drs/dr20xx.cpp
@@ -10,14 +10,13 @@
 #define static_assert(...) _Static_assert(__VA_ARGS__)
 #endif
 
-namespace dr2007 { // dr2007: partial
+namespace dr2007 { // dr2007: 3.4
 template<typename T> struct A { typename T::error e; };
 template<typename T> struct B { };
 B<A<void> > b1;
 B<A<void> > b2 = b1;
 int a = b2[0]; // expected-error {{does not provide a subscript operator}}
-// FIXME: the following code shouldn't instantiate A<void>.
-// int b = (&b2)->foo;
+int b = __builtin_addressof(b2)->foo; // expected-error {{no member}}
 }
 
 namespace dr2026 { // dr2026: 11
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to