From db296e95939ed856abb564135d2e6f586cf1888e Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Fri, 26 Jun 2020 15:13:04 -0700 Subject: work around MSC optimization generating non functional code --- mrbgems/mruby-random/src/random.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 515c0707a..6f31b15a6 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -210,9 +210,16 @@ random_m_srand(mrb_state *mrb, mrb_value self) * Shuffles elements in self in place. */ +#if defined _MSC_VER && _MSC_VER >= 1900 +#pragma optimize( "", off ) +#endif static mrb_value mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) { + /* + * MSC compiler generating invalid instructions with optimization + * enabled + */ mrb_int i; mrb_value max; mrb_value r = mrb_nil_value(); -- cgit v1.2.3 From b8d896e56ab382b89c4980c0dc0efaca23f3a2c9 Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Fri, 26 Jun 2020 21:16:17 -0700 Subject: Narrower scope working around MSC bug --- mrbgems/mruby-random/src/random.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 6f31b15a6..f1834848d 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -210,18 +210,18 @@ random_m_srand(mrb_state *mrb, mrb_value self) * Shuffles elements in self in place. */ -#if defined _MSC_VER && _MSC_VER >= 1900 -#pragma optimize( "", off ) -#endif static mrb_value mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) { + mrb_int i; + mrb_value max; /* * MSC compiler generating invalid instructions with optimization * enabled */ - mrb_int i; - mrb_value max; +#if defined _MSC_VER && _MSC_VER >= 1923 + volatile +#endif mrb_value r = mrb_nil_value(); rand_state *random; -- cgit v1.2.3 From b1017b26513c5773b30b88b0675ab070356fb2a8 Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Fri, 26 Jun 2020 21:44:31 -0700 Subject: Reduce scope of volatile keyword for MSC bug --- mrbgems/mruby-random/src/random.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index f1834848d..55bea5713 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -215,15 +215,18 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) { mrb_int i; mrb_value max; + mrb_value r = mrb_nil_value(); + rand_state *random; + /* - * MSC compiler generating invalid instructions with optimization + * MSC compiler bug generating invalid instructions with optimization * enabled */ #if defined _MSC_VER && _MSC_VER >= 1923 - volatile + volatile mrb_value rr; + rr = r; + r = rr; #endif - mrb_value r = mrb_nil_value(); - rand_state *random; if (RARRAY_LEN(ary) > 1) { mrb_get_args(mrb, "|o", &r); -- cgit v1.2.3 From 6d5652114e2105b1e9d81b353b3c9335ca3b4dd5 Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 13:18:05 -0700 Subject: update CI settings for Windows --- .github/workflows/build.yml | 3 --- appveyor.yml | 20 +++++++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81deb4515..1c6fa34b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -101,6 +101,3 @@ jobs: rake -E "STDOUT.sync=true" -m -j4 test env: MRUBY_CONFIG: appveyor_config.rb - # TODO(take-cheeze): Re-enable /O2 - CFLAGS: "/c /nologo /W3 /we4013 /Zi /MD /D_CRT_SECURE_NO_WARNINGS" - CXXFLAGS: "/c /nologo /W3 /Zi /MD /EHs /D_CRT_SECURE_NO_WARNINGS" diff --git a/appveyor.yml b/appveyor.yml index e135383e1..876e1edb0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,18 @@ version: "{build}" -os: Visual Studio 2017 +os: Visual Studio 2019 shallow_clone: true environment: matrix: + # Visual Studio 2019 64bit + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat + + # Visual Studio 2019 32bit + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat + machine: x86 + # Visual Studio 2017 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat @@ -25,15 +32,14 @@ environment: - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat machine: amd64 - init: - call "%visualcpp%" %machine% - # For using Rubyinstaller's Ruby 2.4 64bit - - set PATH=C:\Ruby24-x64\bin;%PATH% + # For using Rubyins4aller's Ruby 2.6 64bit + # 2.6 is the highest supported Ruby version across all historical + # Visual Studio AppVeyor images. Ruby 2.7 is only on the 2019 image. + - set PATH=C:\Ruby26-x64\bin;%PATH% - ruby --version - build_script: - set MRUBY_CONFIG=appveyor_config.rb - - rake -m - - rake -E $stdout.sync=true test + - rake -E "$stdout.sync=true" -m -j4 test -- cgit v1.2.3 From 3cf48713a2d39e624e9b755bfcfae6fb51a861c9 Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 14:25:59 -0700 Subject: Work around more MSC optimzer bugs --- mrbgems/mruby-random/src/random.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 55bea5713..10c81b946 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -220,12 +220,30 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) /* * MSC compiler bug generating invalid instructions with optimization - * enabled + * enabled. MSC errantly uses a hardcoded value with optimizations on + * when using a fixed value from a union. + * Creating a temp volatile variable and reassigning back to the original + * value tricks the compiler to not perform this optimization; */ #if defined _MSC_VER && _MSC_VER >= 1923 - volatile mrb_value rr; - rr = r; - r = rr; + /* C++ will not cast away volatile easily, so we cannot do something like + * volatile mrb_value rr = r; r = (mrb_value)rr; with C++. + * That cast does work with C. + * We also have to trick the compiler to not optimize away the const_cast entirely + * by creating and manipulating an intermediate volatile pointer. + */ + volatile mrb_value *v_r; + volatile mrb_int ii; + mrb_value *p_r; + v_r = &r; + ii = 2; + v_r = v_r + 2; +#if defined __cplusplus + p_r = const_cast(v_r - ii); +#else + p_r = (mrb_value*)v_r - ii; +#endif + r = *p_r; #endif if (RARRAY_LEN(ary) > 1) { -- cgit v1.2.3 From b59283a03f9f2fed85c6426af9358eb8c8e5b09c Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 15:05:02 -0700 Subject: per-machine appveyor os config --- appveyor.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 876e1edb0..3afc9c98d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,37 +1,46 @@ version: "{build}" -os: Visual Studio 2019 - shallow_clone: true environment: matrix: # Visual Studio 2019 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat + os: Visual Studio 2019 # Visual Studio 2019 32bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat + os: Visual Studio 2019 machine: x86 # Visual Studio 2017 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat + os: Visual Studio 2017 # Visual Studio 2017 32bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat + os: Visual Studio 2017 machine: x86 # Visual Studio 2015 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat + os: Visual Studio 2015 machine: amd64 # Visual Studio 2015 32bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat + os: Visual Studio 2015 machine: x86 # Visual Studio 2013 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat + os: Visual Studio 2013 machine: amd64 + # Visual Studio 2013 32bit + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat + os: Visual Studio 2013 + machine: x86 init: - call "%visualcpp%" %machine% # For using Rubyins4aller's Ruby 2.6 64bit -- cgit v1.2.3 From 206f7ce272ec15f2d156ad26275fa1e03d720ab0 Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 15:21:15 -0700 Subject: simplify appveyor config --- appveyor.yml | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3afc9c98d..08aa4b4ad 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,43 +6,38 @@ environment: matrix: # Visual Studio 2019 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat - os: Visual Studio 2019 + appveyor_build_worker_image: Visual Studio 2019 # Visual Studio 2019 32bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat - os: Visual Studio 2019 - machine: x86 + appveyor_build_worker_image: Visual Studio 2019 # Visual Studio 2017 64bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat - os: Visual Studio 2017 + appveyor_build_worker_image: Visual Studio 2017 # Visual Studio 2017 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat - os: Visual Studio 2017 - machine: x86 + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat + appveyor_build_worker_image: Visual Studio 2017 # Visual Studio 2015 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat - os: Visual Studio 2015 - machine: amd64 + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvars64.bat + appveyor_build_worker_image: Visual Studio 2015 # Visual Studio 2015 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat - os: Visual Studio 2015 - machine: x86 + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvars32.bat + appveyor_build_worker_image: Visual Studio 2015 # Visual Studio 2013 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat - os: Visual Studio 2013 - machine: amd64 + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvars64.bat + appveyor_build_worker_image: Visual Studio 2013 # Visual Studio 2013 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat - os: Visual Studio 2013 - machine: x86 + - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvars32.bat + appveyor_build_worker_image: Visual Studio 2013 + init: - - call "%visualcpp%" %machine% + - call "%visualcpp%" # For using Rubyins4aller's Ruby 2.6 64bit # 2.6 is the highest supported Ruby version across all historical # Visual Studio AppVeyor images. Ruby 2.7 is only on the 2019 image. -- cgit v1.2.3 From 0ed623c44261da33edfb6e14c6c5cc26fb33e17a Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 15:38:11 -0700 Subject: name appveyor jobs, fix <=2015 config --- appveyor.yml | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 08aa4b4ad..cbbc774b2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,40 +4,44 @@ shallow_clone: true environment: matrix: - # Visual Studio 2019 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat + - job_name: Visual Studio 2019 64bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat appveyor_build_worker_image: Visual Studio 2019 - # Visual Studio 2019 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat + - job_name: Visual Studio 2019 32bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat appveyor_build_worker_image: Visual Studio 2019 - # Visual Studio 2017 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat + - job_name: Visual Studio 2017 64bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat appveyor_build_worker_image: Visual Studio 2017 - # Visual Studio 2017 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat + - job_name: Visual Studio 2017 32bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat appveyor_build_worker_image: Visual Studio 2017 - # Visual Studio 2015 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvars64.bat + - job_name: Visual Studio 2015 64bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat appveyor_build_worker_image: Visual Studio 2015 + machine: x86_amd64 - # Visual Studio 2015 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvars32.bat + - job_name: Visual Studio 2015 32bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat appveyor_build_worker_image: Visual Studio 2015 + machine: x86 - # Visual Studio 2013 64bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvars64.bat + - job_name: Visual Studio 2013 64bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat appveyor_build_worker_image: Visual Studio 2013 + machine: x86_amd64 - # Visual Studio 2013 32bit - - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvars32.bat + - job_name: Visual Studio 2013 32bit + visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat appveyor_build_worker_image: Visual Studio 2013 + machine: x86 init: - - call "%visualcpp%" + - call "%visualcpp%" "%machine%" # For using Rubyins4aller's Ruby 2.6 64bit # 2.6 is the highest supported Ruby version across all historical # Visual Studio AppVeyor images. Ruby 2.7 is only on the 2019 image. -- cgit v1.2.3 From ce167d70b77a21baac6686ccb568eaad00bee35f Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 15:44:13 -0700 Subject: fix quoting --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index cbbc774b2..522735abe 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,7 +41,7 @@ environment: machine: x86 init: - - call "%visualcpp%" "%machine%" + - call "%visualcpp%" %machine% # For using Rubyins4aller's Ruby 2.6 64bit # 2.6 is the highest supported Ruby version across all historical # Visual Studio AppVeyor images. Ruby 2.7 is only on the 2019 image. -- cgit v1.2.3 From 5b9f7c0b933d4e4fbe67305075872a28574fa76c Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 15:59:13 -0700 Subject: use 2015 image for 2013 builds, ruby 2 not on 2013 image --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 522735abe..454c0f545 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,12 +32,12 @@ environment: - job_name: Visual Studio 2013 64bit visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat - appveyor_build_worker_image: Visual Studio 2013 + appveyor_build_worker_image: Visual Studio 2015 machine: x86_amd64 - job_name: Visual Studio 2013 32bit visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat - appveyor_build_worker_image: Visual Studio 2013 + appveyor_build_worker_image: Visual Studio 2015 machine: x86 init: -- cgit v1.2.3 From ba9f81db8b8b1bdf80f87559fe80bd37ddd0188f Mon Sep 17 00:00:00 2001 From: Rory OConnell <19547+RoryO@users.noreply.github.com> Date: Mon, 29 Jun 2020 16:16:55 -0700 Subject: VS2013 32-bit does not work --- appveyor.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 454c0f545..ac77222d6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -35,11 +35,6 @@ environment: appveyor_build_worker_image: Visual Studio 2015 machine: x86_amd64 - - job_name: Visual Studio 2013 32bit - visualcpp: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat - appveyor_build_worker_image: Visual Studio 2015 - machine: x86 - init: - call "%visualcpp%" %machine% # For using Rubyins4aller's Ruby 2.6 64bit -- cgit v1.2.3