v8/test/unittests/base
Nico Weber 58b386c4de Make v8 build with -Wmicrosoft-cast under clang-cl.
gcc and clang (and the standard) don't allow implicit conversion of
function pointers to object pointers. MSVC does allow that, and since
system headers require this to work, clang-cl allows it too -- but
it emits a -Wmicrosoft-cast warning (which we currently suppress in
the Chromium build, but which we want to enable.)

As a side effect, when printing a function pointer to a stream, MSVC
(and clang-cl) will pick the operator<<(void*) overload, while gcc
and clang will pick operator<<(bool) since the best allowed conversion
they find is from function pointer to bool.

To prevent the clang-cl warning, we need to make sure that we never
directly print a function pointer to a stream. In v8, this requires
two changes:

1. Give PrintCheckOperand() an explicit specialization for function
   pointers and explicitly cast to void* there.  This ports
   https://codereview.chromium.org/2515283002/ to V8, and also fixes a
   bug on non-Windows where DCHECK() of function pointers would print
   "(1 vs 1)" instead of the function's addresses.
   (The bug remains with member function pointers,
   where it's not clear what to print instead of the 1.)

2. has_output_operator<T> must not use operator<< on its argument
   in an evaluated context if T is a function pointer.  This patch
   modifies has_output_operator<> to use an unevaluated context instead,
   which is simpler than the current approach (and matches what Chromium's
   base does), but changes behavior    in minor (boring) ways
   (see template-utils-unittest.cc), since operator<<() is now
   called with a temporary and only operator<<() implementations callable
   with a temporary are considered.
   A more complicated but behavior-preserving alternative would be to
   add an explicit specialization for function pointers. You can see
   this variant in patch set 1 on gerrit.

Bug: chromium:550065
Change-Id: Idc2854d6c258b7fc0b959604006d8952a79eca3d
Reviewed-on: https://chromium-review.googlesource.com/940004
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: Clemens Hammacher <clemensh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51636}
2018-02-28 18:06:57 +00:00
..
platform Bring Time(Delta)::Min/Max() and related helpers to V8. 2018-02-02 15:38:55 +00:00
utils Reland "Introduce gc flag for fuzzing over compaction." 2017-11-07 15:29:30 +00:00
atomic-utils-unittest.cc [base] Add tests for base::AsAtomicWord::SetBits. 2017-08-16 15:13:02 +00:00
bits-unittest.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
cpu-unittest.cc [x86] Disable AVX unless the operating system explicitly claims to support it. 2015-01-27 09:59:24 +00:00
division-by-constant-unittest.cc Remove v8stdint.h, it doesn't serve a purpose anymore. 2014-10-21 08:25:14 +00:00
flags-unittest.cc Remove v8stdint.h, it doesn't serve a purpose anymore. 2014-10-21 08:25:14 +00:00
functional-unittest.cc Revert "MIPS[64] Implementation of MSA instructions in builtin simulator" 2017-11-17 11:02:48 +00:00
ieee754-unittest.cc [builtins] Unify most of the remaining Math builtins. 2016-07-01 11:13:02 +00:00
iterator-unittest.cc Avoid signed/unsigned warning in VC++ 2017 builds 2017-04-24 19:29:59 +00:00
logging-unittest.cc Make v8 build with -Wmicrosoft-cast under clang-cl. 2018-02-28 18:06:57 +00:00
macros-unittest.cc [base] Align the address hint in VirtualMemory. 2017-07-27 13:50:06 +00:00
ostreams-unittest.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
sys-info-unittest.cc Remove NaCl support. 2016-07-27 07:50:31 +00:00
template-utils-unittest.cc Make v8 build with -Wmicrosoft-cast under clang-cl. 2018-02-28 18:06:57 +00:00