]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/uuid/test/test_msvc_simd_bug981648_main.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / uuid / test / test_msvc_simd_bug981648_main.cpp
CommitLineData
7c673cae
FG
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* http://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* This file contains the main entry point.
16*/
17#include <cstdio>
18#include "test_msvc_simd_bug981648.hpp"
19extern void mp_grid_update_marker_parameters(headerProperty* header_prop, my_obj &current_marker);
20static my_obj g_my_obj;
b32b8144 21int main(void)
7c673cae
FG
22{
23my_obj *p = &g_my_obj;
24p->m_uuid = uuid();
25uuid one, two;
26one.data[0] = 0; two.data[0] = 1;
27//*****************************************
28// This != statement generates two movdqu statements or pcmpeqd with a memory operand which crashes
29if (one != two) {
30std::printf("The first != operator works okay if it reaches this printf.\n");
31}
32my_obj a;
33a.m_uuid.data[0] = 1;
34std::printf("There should be a another printf coming next.\n");
35//*****************************************
36// The != statement in this function generates a movups and a movdqu statement.
37// It also crashes because the optimizer also creates a pcmpeqd for a non-aligned memory location.
38mp_grid_update_marker_parameters(p, a);
39return 0;
b32b8144 40}