diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake
index c79d4239a91de82f0361505f62fd5d83b4307223..850fc14e044ec33dbf4fcacf7b01c084b0deb36e 100644
--- a/Modules/CMakeCompilerIdDetection.cmake
+++ b/Modules/CMakeCompilerIdDetection.cmake
@@ -18,7 +18,7 @@ function(compiler_id_detection outvar lang)
     file(GLOB lang_files
       "${CMAKE_ROOT}/Modules/Compiler/*-DetermineCompiler.cmake")
     set(nonlang CXX)
-    if (lang STREQUAL CXX)
+    if ("x${lang}" STREQUAL "xCXX")
       set(nonlang C)
     endif()
 
diff --git a/Modules/CMakeDetermineCompileFeatures.cmake b/Modules/CMakeDetermineCompileFeatures.cmake
index f767847936dd339c5889672276d3f1e0af8de694..ee7fedba4a440692c3cfd7205dac9adf004d4610 100644
--- a/Modules/CMakeDetermineCompileFeatures.cmake
+++ b/Modules/CMakeDetermineCompileFeatures.cmake
@@ -4,7 +4,7 @@
 
 function(cmake_determine_compile_features lang)
 
-  if(lang STREQUAL C AND COMMAND cmake_record_c_compile_features)
+  if("x${lang}" STREQUAL "xC" AND COMMAND cmake_record_c_compile_features)
     message(CHECK_START "Detecting ${lang} compile features")
 
     set(CMAKE_C90_COMPILE_FEATURES)
@@ -54,7 +54,7 @@ function(cmake_determine_compile_features lang)
 
     message(CHECK_PASS "done")
 
-  elseif(lang STREQUAL CXX AND COMMAND cmake_record_cxx_compile_features)
+  elseif("x${lang}" STREQUAL "xCXX" AND COMMAND cmake_record_cxx_compile_features)
     message(CHECK_START "Detecting ${lang} compile features")
 
     set(CMAKE_CXX98_COMPILE_FEATURES)
@@ -110,7 +110,7 @@ function(cmake_determine_compile_features lang)
 
     message(CHECK_PASS "done")
 
-  elseif(lang STREQUAL CUDA AND COMMAND cmake_record_cuda_compile_features)
+  elseif("x${lang}" STREQUAL "xCUDA" AND COMMAND cmake_record_cuda_compile_features)
     message(CHECK_START "Detecting ${lang} compile features")
 
     set(CMAKE_CUDA03_COMPILE_FEATURES)
diff --git a/Tests/RunCMake/ToolchainFile/LangVars-toolchain.cmake b/Tests/RunCMake/ToolchainFile/LangVars-toolchain.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..be07dc318dac4f9bf46ddd92db8ff9568387de78
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/LangVars-toolchain.cmake
@@ -0,0 +1,2 @@
+set(C 1)
+set(CXX 1)
diff --git a/Tests/RunCMake/ToolchainFile/LangVars.cmake b/Tests/RunCMake/ToolchainFile/LangVars.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..169e639f5a1d793e4a8d3fb32fa424fda3ea8a13
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/LangVars.cmake
@@ -0,0 +1,7 @@
+foreach(test_language C CXX)
+  enable_language(${test_language})
+  if(DEFINED CMAKE_${test_language}_STANDARD_DEFAULT
+      AND NOT CMAKE_${test_language}_COMPILE_FEATURES)
+    message(FATAL_ERROR "Compile features not found for ${test_language}")
+  endif()
+endforeach()
diff --git a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
index 659523c4253900298e3eeb2b12f5153ecbc16353..304c10525ab9fb4821733e6d678f1ff848d73da7 100644
--- a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
@@ -9,6 +9,7 @@ run_cmake_toolchain(CallEnableLanguage)
 run_cmake_toolchain(CallProject)
 run_cmake_toolchain(CheckLanguage)
 run_cmake_toolchain(FlagsInit)
+run_cmake_toolchain(LangVars)
 run_cmake_toolchain(LinkFlagsInit)
 
 function(run_IncludeDirectories)