diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dbe1080a8f986..b69c0ebc74fe5 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -88,7 +88,7 @@ jobs: - name: Install vcpkg uses: lukka/run-vcpkg@v11 with: - vcpkgGitCommitId: c82f74667287d3dc386bce81e44964370c91a289 + vcpkgGitCommitId: 62159a45e18f3a9ac0548628dcaf74fcb60c6ff9 runVcpkgInstall: true - name: create $ACE_ROOT/ace/config.h run: | diff --git a/ACE/tests/Compiler_Features_41_Test.cpp b/ACE/tests/Compiler_Features_41_Test.cpp index 931e7d7b1e9c7..ac68450cdfe8f 100644 --- a/ACE/tests/Compiler_Features_41_Test.cpp +++ b/ACE/tests/Compiler_Features_41_Test.cpp @@ -21,34 +21,46 @@ run_main (int, ACE_TCHAR *[]) #if defined (ACE_HAS_WIN32_STRUCTURED_EXCEPTIONS) bool finally_executed = false; + bool except_executed = false; - ACE_DEBUG ((LM_DEBUG,("Testing __try/__finally\n"))); + ACE_DEBUG ((LM_DEBUG,("Testing __try/__except/__finally\n"))); ACE_SEH_TRY + { + ACE_DEBUG ((LM_DEBUG, ("In outer SEH_TRY\n"))); + + ACE_SEH_TRY { - ACE_DEBUG ((LM_DEBUG,("In SEH_TRY\n"))); + ACE_DEBUG ((LM_DEBUG, ("In inner SEH_TRY\n"))); // Intentionally cause an access violation exception, use a helper function // as non-call SEH isn't supported with clang based windows compilers - test(); + test (); // If we get here without an exception, SEH isn't working ACE_ERROR ((LM_ERROR, "No exception was raised from null pointer dereference\n")); result = -1; } - ACE_SEH_FINALLY + ACE_SEH_FINALLY { - ACE_DEBUG ((LM_DEBUG,("In SEH_FINALLY\n"))); + ACE_DEBUG ((LM_DEBUG, ("In inner SEH_FINALLY\n"))); finally_executed = true; // If we're here due to an exception, that's the expected behavior - test passes } + } + ACE_SEH_EXCEPT (GetExceptionCode () == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) + { + ACE_DEBUG ((LM_DEBUG, ("In outer SEH_EXCEPT\n"))); + except_executed = true; + } ACE_DEBUG ((LM_DEBUG,("After SEH_FINALLY\n"))); // On successful SEH handling: // 1. The null pointer dereference should raise an exception // 2. The FINALLY block should execute - // 3. Execution should continue after the SEH blocks + // 3. The EXCEPT block should be executed + // 4. Execution should continue after the SEH blocks if (finally_executed) { ACE_DEBUG ((LM_DEBUG, "SEH test passed - FINALLY block was executed\n")); @@ -58,6 +70,15 @@ run_main (int, ACE_TCHAR *[]) ACE_ERROR ((LM_ERROR, "SEH test failed - FINALLY block was not executed\n")); result = -1; } + if (except_executed) + { + ACE_DEBUG ((LM_DEBUG, "SEH test passed - EXCEPT block was executed\n")); + } + else + { + ACE_ERROR ((LM_ERROR, "SEH test failed - EXCEPT block was not executed\n")); + result = -1; + } #else ACE_DEBUG ((LM_INFO, ACE_TEXT ("Platform lacks ACE_HAS_WIN32_STRUCTURED_EXCEPTIONS\n")));