Skip to content

Conversation

@sebres
Copy link

@sebres sebres commented Oct 15, 2021

Issue

Build with newest msys/mingw toolchain using gcc/g++ compiler fails because it confuses GNU and MSVC compilers.
Option _WIN32 is defined now and so cannot be used anymore to detect gcc as opposed to msvc starting from gcc v.10.

Details

The excerpts of prepro-defines declared for gcc now ...
$ gcc --version
gcc.exe (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 11.2.0

# 64-bit:
$ gcc -m64 -dM -E - < /dev/null | grep -E 'WIN32|GNUC__|WIN64|__VERSION__' | sort -d
#define __GNUC__ 11
#define __VERSION__ "11.2.0"
#define WIN32 1
#define _WIN32 1
#define __WIN32 1
#define __WIN32__ 1
#define WIN64 1
#define _WIN64 1
#define __WIN64 1
#define __WIN64__ 1

# 32-bit:
$ gcc -m32 -dM -E - < /dev/null | grep -E 'WIN32|GNUC__|WIN64|__VERSION__' | sort -d
#define __GNUC__ 11
#define __VERSION__ "11.2.0"
#define WIN32 1
#define _WIN32 1
#define __WIN32 1
#define __WIN32__ 1

For windows platform (WIN32 or _WIN32 set), the compilers can be detected using following preprocessor defines:

compiler #if statement
gcc or clang defined(__GNUC__)
gcc (defined(__GNUC__) && !defined(__clang__))
clang defined(__clang__)
msvc defined(_MSC_VER)

Or using related BOOST_COMP_* defines since hyperscan already includes boost.

Fix

Proposed PR fixes the issue with misdetected (msvc) compiler using _MSC_VER instead of _WIN32 in minimalist approach, so one is able to build hyperscan with modern gcc compilers hereafter.

Note

The PR including #332 at the moment, I could rebase the branch to HEAD without 8306d2f if desired.

Toolchain and platform details

$ cmake --version
cmake version 3.20.1

$ gcc --version
gcc.exe (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders) 11.2.0

$ grep 'Boost VERSION' ../../include/boost/CMakeLists.txt
project(Boost VERSION 1.78.0 LANGUAGES CXX)

$ bash --version
GNU bash, version 5.1.8(1)-release (x86_64-pc-msys)

$ systeminfo | grep 'OS '
OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.19042 N/A Build 19042

…ild in sub-directory (take a look into `include/boost` before `include`);

otherwise `cd build/Release_x64; cmake -S ../.. -B .` may fail, because it cannot find linked boost folder.
@sebres
Copy link
Author

sebres commented Oct 15, 2021

Just for the record (as reference), there is old PR #36 that may target similar issue.

GerHobbelt pushed a commit to GerHobbelt/hyperscan that referenced this pull request Aug 31, 2025
intel#333)

Fixed out of bounds read in AVX512VBMI version of fdr_exec_fat_teddy (intel#322)

  * Replaced the 32 byte read with a properly truncated mapped read
  * Added a unit test

Co-authored-by: Rafał Dowgird <rafal.dowgird@rtbhouse.com>
GerHobbelt pushed a commit to GerHobbelt/hyperscan that referenced this pull request Aug 31, 2025
Multiple changes since last release, this will be the last 100% ABI and
API compatible with Hyperscan release.
Next versions will include major refactors and API extensions, it will
be mostly backwards compatible however.
Without particular order, platform support is now:

* Linux (x86, Arm, Power)
* FreeBSD 14 (x86, Arm, Power)
* MacOS 14+ (x86, Arm)

In total more than 200 configurations in the CI are tested for every PR.

Other features:
- Fat Runtime supported for Arm as well (ASIMD/SVE/SVE2).
- Initial implementations for Arm SVE/SVE2 algorithms added, thanks to
Yoan Picchi from Arm.
- SIMDe support added, used as an alternative backend for existing
platforms, but mostly interesting for allowing Vectorscan to build in
new platforms without a supported SIMD engine.
- Various speedups and optimizations.
- Cppcheck and clang-tidy fixes throughout the code, both have been
added to CI for multiple configurations, but only cppcheck triggers a
build failure for now.

Various bugfixes, most important listed:
- Speed up truffle with 256b TBL instructions (intel#290)
- Fix Clang Tidy warnings (intel#295)
- Clang 17+ is more restrictive on rebind<T> on MacOS/Boost, remove
warning (intel#332)
- partial_load_u64 will fail if buf == NULL/c_len == 0 (intel#331)
- Bugfix/fix avx512vbmi regressions (intel#335)
- fix missing hs_version.h header (closes intel#198)
- hs_valid_platform: Fix check for SSE4.2 (intel#310)
- Fixed out of bounds read in AVX512VBMI version of fdr_exec_fat_teddy …
(intel#333)
- Fix noodle SVE2 off by one bug (intel#313)
- Make vectorscan accept \0 starting pattern (intel#312)
- Fix 5.4.11's config step regression (intel#327)
- Fix double shufti's vector end false positive (intel#325)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant