diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index b5b911f..abbfcc5 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -60,6 +60,7 @@
 #include "vk_layer_data.h"
 #include "vk_layer_extension_utils.h"
 #include "vk_layer_utils.h"
+#include "spirv-tools/libspirv.h"
 
 #if defined __ANDROID__
 #include <android/log.h>
@@ -915,14 +916,6 @@
     return src->end();
 }
 
-bool shader_is_spirv(VkShaderModuleCreateInfo const *pCreateInfo) {
-    uint32_t *words = (uint32_t *)pCreateInfo->pCode;
-    size_t sizeInWords = pCreateInfo->codeSize / sizeof(uint32_t);
-
-    /* Just validate that the header makes sense. */
-    return sizeInWords >= 5 && words[0] == spv::MagicNumber && words[1] == spv::Version;
-}
-
 static char const *storage_class_name(unsigned sc) {
     switch (sc) {
     case spv::StorageClassInput:
@@ -8904,11 +8897,24 @@
                                                                     VkShaderModule *pShaderModule) {
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
     bool skip_call = false;
-    if (!shader_is_spirv(pCreateInfo)) {
-        skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
-                             /* dev */ 0, __LINE__, SHADER_CHECKER_NON_SPIRV_SHADER, "SC", "Shader is not SPIR-V");
+
+    /* Use SPIRV-Tools validator to try and catch any issues with the module itself */
+    spv_context ctx = spvContextCreate(SPV_ENV_VULKAN_1_0);
+    spv_const_binary_t binary { pCreateInfo->pCode, pCreateInfo->codeSize / sizeof(uint32_t) };
+    spv_diagnostic diag = nullptr;
+
+    auto result = spvValidate(ctx, &binary, &diag);
+    if (result != SPV_SUCCESS) {
+        skip_call |= log_msg(my_data->report_data,
+                             result == SPV_WARNING ? VK_DEBUG_REPORT_WARNING_BIT_EXT : VK_DEBUG_REPORT_ERROR_BIT_EXT,
+                             VkDebugReportObjectTypeEXT(0), 0,
+                             __LINE__, SHADER_CHECKER_INCONSISTENT_SPIRV, "SC", "SPIR-V module not valid: %s",
+                             diag && diag->error ? diag->error : "(no error text)");
     }
 
+    spvDiagnosticDestroy(diag);
+    spvContextDestroy(ctx);
+
     if (skip_call)
         return VK_ERROR_VALIDATION_FAILED_EXT;
 
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 81f5498..0be2409 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -5795,7 +5795,7 @@
 #if SHADER_CHECKER_TESTS
 TEST_F(VkLayerTest, InvalidSPIRVCodeSize) {
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
-                                         "Shader is not SPIR-V");
+                                         "Invalid SPIR-V header");
 
     ASSERT_NO_FATAL_FAILURE(InitState());
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
@@ -5820,7 +5820,7 @@
 
 TEST_F(VkLayerTest, InvalidSPIRVMagic) {
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
-                                         "Shader is not SPIR-V");
+                                         "Invalid SPIR-V magic number");
 
     ASSERT_NO_FATAL_FAILURE(InitState());
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
@@ -5843,9 +5843,11 @@
     m_errorMonitor->VerifyFound();
 }
 
+#if 0
+// Not currently covered by SPIRV-Tools validator
 TEST_F(VkLayerTest, InvalidSPIRVVersion) {
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_ERROR_BIT_EXT,
-                                         "Shader is not SPIR-V");
+                                         "Invalid SPIR-V header");
 
     ASSERT_NO_FATAL_FAILURE(InitState());
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
@@ -5868,6 +5870,7 @@
 
     m_errorMonitor->VerifyFound();
 }
+#endif
 
 TEST_F(VkLayerTest, CreatePipelineVertexOutputNotConsumed) {
     m_errorMonitor->SetDesiredFailureMsg(VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,
