diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebe5246..b21d9ed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,10 +14,15 @@
 
 cmake_minimum_required(VERSION 3.13)
 
-set(CMAKE_CXX_STANDARD 14)
-
 project(SwiftShader C CXX ASM)
 
+set(CMAKE_CXX_STANDARD 14)
+set(CXX_STANDARD_REQUIRED ON)
+# MSVC doesn't define __cplusplus by default
+if(MSVC)
+    string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
+endif()
+
 ###########################################################
 # Detect system
 ###########################################################
diff --git a/src/Reactor/LLVMAsm.cpp b/src/Reactor/LLVMAsm.cpp
index e7b19e6..ab6e093 100644
--- a/src/Reactor/LLVMAsm.cpp
+++ b/src/Reactor/LLVMAsm.cpp
@@ -51,7 +51,7 @@
 
 	static size_t counter = 0;
 	std::stringstream f;
-	f << "swiftshader_jit_llvm_" << std::setfill('0') << std::setw(4) << counter++ << "_" << routineName << ".asm";
+	f << "reactor_jit_llvm_" << std::setfill('0') << std::setw(4) << counter++ << "_" << routineName << ".asm";
 	return f.str();
 }
 
diff --git a/tests/ReactorUnitTests/CMakeLists.txt b/tests/ReactorUnitTests/CMakeLists.txt
index 59e0406..0b98072 100644
--- a/tests/ReactorUnitTests/CMakeLists.txt
+++ b/tests/ReactorUnitTests/CMakeLists.txt
@@ -31,6 +31,11 @@
     ${REACTOR_UNIT_TESTS_SRC_FILES}
 )
 
+target_compile_features(ReactorUnitTests
+    PUBLIC
+        cxx_std_17
+)
+
 set_target_properties(ReactorUnitTests PROPERTIES
     FOLDER "Tests"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
diff --git a/tests/ReactorUnitTests/ReactorUnitTests.cpp b/tests/ReactorUnitTests/ReactorUnitTests.cpp
index 292aa2f..7b5bb1b 100644
--- a/tests/ReactorUnitTests/ReactorUnitTests.cpp
+++ b/tests/ReactorUnitTests/ReactorUnitTests.cpp
@@ -20,9 +20,19 @@
 
 #include <array>
 #include <cmath>
+#include <fstream>
 #include <thread>
 #include <tuple>
 
+// TODO(b/174843857): Remove once we upgrade to C++17
+#if(__cplusplus >= 201703L)
+#	define HAS_STD_FILESYSTEM
+#endif
+
+#if(defined(HAS_STD_FILESYSTEM))
+#	include <filesystem>
+#endif
+
 using namespace rr;
 
 std::string testName()
@@ -3249,6 +3259,75 @@
 	EXPECT_EQ(result, expected);
 }
 
+#if defined(ENABLE_RR_EMIT_ASM_FILE) && defined(HAS_STD_FILESYSTEM)
+TEST(ReactorUnitTests, EmitAsm)
+{
+	// Only supported by LLVM for now
+	if(BackendName().find("LLVM") == std::string::npos) return;
+
+	namespace fs = std::filesystem;
+
+	FunctionT<int(void)> function;
+	{
+		Int sum;
+		For(Int i = 0, i < 10, i++)
+		{
+			sum += i;
+		}
+		Return(sum);
+	}
+
+	auto routine = function(testName().c_str());
+
+	// Returns path to first match of filename in current directory
+	auto findFile = [](const std::string filename) -> fs::path {
+		for(auto &p : fs::directory_iterator("."))
+		{
+			if(!p.is_regular_file())
+				continue;
+			auto currFilename = p.path().filename().string();
+			auto index = currFilename.find(testName());
+			if(index != std::string::npos)
+			{
+				return p.path();
+			}
+		}
+		return {};
+	};
+
+	fs::path path = findFile(testName());
+	EXPECT_FALSE(path.empty());
+
+	// Make sure an asm file was created
+	std::ifstream fin(path);
+	EXPECT_TRUE(fin);
+
+	// Make sure address of routine is in the file
+	auto findAddressInFile = [](std::ifstream &fin, size_t address) {
+		std::string addressString = [&] {
+			std::stringstream addressSS;
+			addressSS << "0x" << std::uppercase << std::hex << address;
+			return addressSS.str();
+		}();
+
+		std::string token;
+		while(fin >> token)
+		{
+			if(token.find(addressString) != std::string::npos)
+				return true;
+		}
+		return false;
+	};
+
+	size_t address = reinterpret_cast<size_t>(routine.getEntry());
+	EXPECT_TRUE(findAddressInFile(fin, address));
+
+	// Delete the file in case subsequent runs generate one with a different sequence number
+	fin.close();
+	std::filesystem::remove(path);
+}
+#endif
+
 ////////////////////////////////
 // Trait compile time checks. //
 ////////////////////////////////
diff --git a/tests/kokoro/gcp_ubuntu/continuous.sh b/tests/kokoro/gcp_ubuntu/continuous.sh
index 15ece27..ad1d479 100755
--- a/tests/kokoro/gcp_ubuntu/continuous.sh
+++ b/tests/kokoro/gcp_ubuntu/continuous.sh
@@ -54,6 +54,14 @@
 cd ..
 build/ReactorUnitTests --gtest_filter=ReactorUnitTests.Print*
 
+# Incrementally build with REACTOR_EMIT_ASM_FILE and run unit test
+cd build
+cmake .. "-DREACTOR_EMIT_ASM_FILE=1"
+cmake --build . --target ReactorUnitTests -- -j $(nproc)
+cmake .. "-DREACTOR_EMIT_ASM_FILE=0"
+cd ..
+build/ReactorUnitTests --gtest_filter=ReactorUnitTests.EmitAsm
+
 # Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
 cd build
 cmake .. "-DREACTOR_EMIT_DEBUG_INFO=1"
diff --git a/tests/kokoro/gcp_windows/continuous.bat b/tests/kokoro/gcp_windows/continuous.bat
index 0a1b0c5..4873f25 100644
--- a/tests/kokoro/gcp_windows/continuous.bat
+++ b/tests/kokoro/gcp_windows/continuous.bat
@@ -45,6 +45,13 @@
 Debug\ReactorUnitTests.exe --gtest_filter=ReactorUnitTests.Print* || goto :error
 cmake "-DREACTOR_ENABLE_PRINT=0" .. || goto :error
 
+REM Incrementally build with REACTOR_EMIT_ASM_FILE and run unit test
+cd %SRC%\build || goto :error
+cmake "-DREACTOR_EMIT_ASM_FILE=1" .. || goto :error
+cmake --build . --target ReactorUnitTests || goto :error
+Debug\ReactorUnitTests.exe --gtest_filter=ReactorUnitTests.EmitAsm || goto :error
+cmake "-DREACTOR_EMIT_ASM_FILE=0" .. || goto :error
+
 REM Incrementally build with REACTOR_EMIT_DEBUG_INFO to ensure it builds
 cd %SRC%\build || goto :error
 cmake "-DREACTOR_EMIT_DEBUG_INFO=1" .. || goto :error
