test_msvc_simd_bug981648_foo.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. /*
  2. * Copyright 2014 Andrey Semashev
  3. *
  4. * Distributed under the Boost Software License, Version 1.0.
  5. * See accompanying file LICENSE_1_0.txt or copy at
  6. * https://www.boost.org/LICENSE_1_0.txt
  7. */
  8. /*
  9. * This is a part of the test for a workaround for MSVC 12 (VS2013) optimizer bug
  10. * which causes incorrect SIMD code generation for operator==. See:
  11. *
  12. * https://svn.boost.org/trac/boost/ticket/8509#comment:3
  13. * https://connect.microsoft.com/VisualStudio/feedbackdetail/view/981648#tabs
  14. *
  15. * The file contains the function that actually causes the crash. Reproduces only
  16. * in Release x64 builds.
  17. */
  18. #include <cstdio>
  19. #include "test_msvc_simd_bug981648.hpp"
  20. void mp_grid_update_marker_parameters(headerProperty* header_prop, my_obj &current_marker)
  21. {
  22. headerProperty *old_header_prop = NULL;
  23. my_obj *p = dynamic_cast<my_obj*>(header_prop);
  24. /*
  25. * This != statement crashes with a GP.
  26. * */
  27. if (p != NULL && (current_marker.get_id() != p->get_marker_id())) {
  28. std::printf("works okay, if it reaches this printf: %p\n", reinterpret_cast<void *>(p));
  29. old_header_prop = header_prop;
  30. if (old_header_prop == 0) { fprintf(stderr, "ouch"); }
  31. }
  32. }