Skip to content

Commit ae93121

Browse files
committed
Detect: Add __STDCPP_DEFAULT_NEW_ALIGNMENT__ predefined VS macro
This macro is missing from the main MSVC predefined macro list but is documented by [1] and [2]. Also add `__STDCPP_STRICT_POINTER_SAFETY__` as documented by [2] in case MSVC ever starts defining it. [1] https://docs.microsoft.com/en-us/cpp/build/reference/zc-alignednew [2] https://en.cppreference.com/w/cpp/preprocessor/replace Fixes: CastXML#125
1 parent 6eb403d commit ae93121

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

Diff for: share/castxml/detect_vs.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@
176176
#ifdef __MSVC_RUNTIME_CHECKS
177177
# pragma message(TO_DEFINE(__MSVC_RUNTIME_CHECKS))
178178
#endif
179+
#ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__
180+
# pragma message(TO_DEFINE(__STDCPP_DEFAULT_NEW_ALIGNMENT__))
181+
#endif
182+
#ifdef __STDCPP_STRICT_POINTER_SAFETY__
183+
# pragma message(TO_DEFINE(__STDCPP_STRICT_POINTER_SAFETY__))
184+
#endif
179185
#ifdef __STDCPP_THREADS__
180186
# pragma message(TO_DEFINE(__STDCPP_THREADS__))
181187
#endif

Diff for: test/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ castxml_test_cmd(cc-msvc-std-c++98 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc>
394394
castxml_test_cmd(cc-msvc-std-c++11 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1600 ")" ${empty_cxx} "-###")
395395
castxml_test_cmd(cc-msvc-std-c++14 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 ")" ${empty_cxx} "-###")
396396
castxml_test_cmd(cc-msvc-std-c++17 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 -msvc_lang=201703L ")" ${empty_cxx} "-###")
397+
castxml_test_cmd(cc-msvc-std-c++17-E --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 -msvc_lang=201703L -stdcpp_default_new_alignment=16ll ")" ${empty_cxx} -E -dM)
397398
castxml_test_cmd(cc-msvc-std-explicit --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1500 ")" -std=gnu++14 ${empty_cxx} "-###")
398399
castxml_test_cmd(cc-msvc-builtin-1800-E --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1800 ")" ${empty_cxx} -E -dM)
399400
castxml_test_cmd(cc-msvc-builtin-1900-E --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 ")" ${empty_cxx} -E -dM)

Diff for: test/cc-msvc.c

+9-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@ int main(int argc, const char* argv[])
66
int cpp = 0;
77
const char* msc_ver = "1600";
88
const char* msvc_lang = 0;
9+
const char* stdcpp_default_new_alignment = 0;
910
int i;
1011
for (i = 1; i < argc; ++i) {
1112
if (strncmp(argv[i], "--cc-define=", 12) == 0) {
1213
fprintf(stdout, "\n#define %s 1", argv[i]+12);
1314
} else if (strncmp(argv[i], "-msc=", 5) == 0) {
1415
msc_ver = argv[i]+5;
15-
} else if (strncmp(argv[i], "-msvc_lang=", 8) == 0) {
16+
} else if (strncmp(argv[i], "-msvc_lang=", 11) == 0) {
1617
msvc_lang = argv[i]+11;
18+
} else if (strncmp(argv[i], "-stdcpp_default_new_alignment=", 30) == 0) {
19+
stdcpp_default_new_alignment = argv[i]+30;
1720
} else if (strstr(argv[i], ".cpp")) {
1821
cpp = 1;
1922
}
@@ -34,6 +37,11 @@ int main(int argc, const char* argv[])
3437
"#define _MSVC_LANG %s\n", msvc_lang
3538
);
3639
}
40+
if(stdcpp_default_new_alignment) {
41+
fprintf(stdout,
42+
"#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ %s\n",
43+
stdcpp_default_new_alignment);
44+
}
3745
fprintf(stdout,
3846
"#define __has_include(x) x\n"
3947
"#define __has_include_next(x) x\n"

Diff for: test/expect/cmd.cc-msvc-std-c++17-E.stdout.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
^#define _MSC_VER 1900
2+
#define _MSVC_LANG 201703L
3+
#define _WIN32 1
4+
#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16ll
5+
#define __castxml__ [0-9]+
6+
#define __castxml_clang_major__ [0-9]+
7+
#define __castxml_clang_minor__ [0-9]+
8+
#define __castxml_clang_patchlevel__ [0-9]+
9+
#define __cplusplus 199711L
10+
#define __is_assignable\(_To,_Fr\) \(sizeof\(__castxml__is_assignable_check<_To,_Fr>\(0\)\) == sizeof\(char\(&\)\[1\]\)\)(
11+
#define __make_integer_seq __castxml__make_integer_seq)?$

0 commit comments

Comments
 (0)