layers: Stop false positive for PushConstant spec const
diff --git a/layers/core_checks/cc_shader.cpp b/layers/core_checks/cc_shader.cpp
index f0d65f5..970d76b 100644
--- a/layers/core_checks/cc_shader.cpp
+++ b/layers/core_checks/cc_shader.cpp
@@ -224,6 +224,11 @@
                                            const EntryPoint &entrypoint) const {
     bool skip = false;
 
+    // TODO - Workaround for https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/5911
+    if (module_state.static_data_.has_specialization_constants) {
+        return skip;
+    }
+
     const VkShaderStageFlagBits stage = entrypoint.stage;
     const auto push_constant_variable = entrypoint.push_constant_variable;
     if (!push_constant_variable) {
diff --git a/tests/positive/shader_push_constants.cpp b/tests/positive/shader_push_constants.cpp
index f3f0dab..c07a68d 100644
--- a/tests/positive/shader_push_constants.cpp
+++ b/tests/positive/shader_push_constants.cpp
@@ -746,8 +746,8 @@
     m_commandBuffer->end();
 }
 
-TEST_F(PositiveShaderPushConstants, SpecConstantSize) {
-    TEST_DESCRIPTION("Use SpecConstant to adjust size of Push Constant Block");
+TEST_F(PositiveShaderPushConstants, SpecConstantSizeDefault) {
+    TEST_DESCRIPTION("Use SpecConstant to adjust size of Push Constant Block, but use default value");
     ASSERT_NO_FATAL_FAILURE(Init());
 
     const char *cs_source = R"glsl(
@@ -771,4 +771,46 @@
     pipe.InitState();
     pipe.pipeline_layout_ = VkPipelineLayoutObj(m_device, {}, {push_constant_range});
     pipe.CreateComputePipeline();
+}
+
+TEST_F(PositiveShaderPushConstants, SpecConstantSizeSet) {
+    TEST_DESCRIPTION("Use SpecConstant to adjust size of Push Constant Block");
+    ASSERT_NO_FATAL_FAILURE(Init());
+
+    const char *cs_source = R"glsl(
+        #version 460
+        layout (constant_id = 0) const int my_array_size = 256;
+        layout (push_constant) uniform my_buf {
+            float my_array[my_array_size];
+        } pc;
+
+        void main() {
+            float a = pc.my_array[0];
+        }
+    )glsl";
+
+    // Setting makes the VkPushConstantRange valid
+    uint32_t data = 1;
+
+    VkSpecializationMapEntry entry;
+    entry.constantID = 0;
+    entry.offset = 0;
+    entry.size = sizeof(uint32_t);
+
+    VkSpecializationInfo specialization_info = {};
+    specialization_info.mapEntryCount = 1;
+    specialization_info.pMapEntries = &entry;
+    specialization_info.dataSize = sizeof(uint32_t);
+    specialization_info.pData = &data;
+
+    VkPushConstantRange push_constant_range = {VK_SHADER_STAGE_COMPUTE_BIT, 0, 16};
+    const VkPipelineLayoutObj pipeline_layout(m_device, {}, {push_constant_range});
+
+    CreateComputePipelineHelper pipe(*this);
+    pipe.InitInfo();
+    pipe.cs_.reset(
+        new VkShaderObj(this, cs_source, VK_SHADER_STAGE_COMPUTE_BIT, SPV_ENV_VULKAN_1_0, SPV_SOURCE_GLSL, &specialization_info));
+    pipe.InitState();
+    pipe.pipeline_layout_ = VkPipelineLayoutObj(m_device, {}, {push_constant_range});
+    pipe.CreateComputePipeline();
 }
\ No newline at end of file