Add __analysis_assume support to CHECK macros to reduce warnings with /analyze.

Due to bugs and quirks in the analysis engine this is a very delicate dance.

The __analysis_assume invocation has to evaluate !!(condition) instead
of just condition because otherwise it fails on overloaded operators
such as with smart pointers. See this post for details:
http://randomascii.wordpress.com/2011/09/13/analyze-for-visual-studio-the-ugly-part-5/

The evaluation of condition in the 'regular' part of the macro has to
be removed during the /analyze phase in order to avoid confusing the
analysis engine which thinks that branching on the condition implies
uncertainty about the condition.

None of this is documented -- thinking like a compiler is required.

Wrapping this with #ifdef _PREFAST_ makes it easy to guarantee that this
will not affect regular builds.

To build add  win_debug_extra_cflags="/analyze"  to GYP_DEFINES, rebuild
the project files and then build.

Review URL: https://codereview.chromium.org/674643002

Cr-Commit-Position: refs/heads/master@{#300937}


CrOS-Libchrome-Original-Commit: 9d1602515adc3e797d71c3a0e29cc175432eb8fe
1 file changed
tree: 38092f5f30586365d7eb7b9601fba5edb748d882
  1. base/
  2. build/
  3. components/
  4. dbus/
  5. device/
  6. ipc/
  7. mojo/
  8. testing/
  9. third_party/
  10. ui/