layers: Correct 32bit handling of ValidationCache

Updated handle casting for Validation object to size-safe/portable
calls.  Corrected incorrect loop increment for 64bit handles cast to
32bit pointers.

Change-Id: I459a0f37426ec5656e228e91b4b116e7dacc0e3d
diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp
index 3cbe518..3482a18 100644
--- a/layers/shader_validation.cpp
+++ b/layers/shader_validation.cpp
@@ -2532,11 +2532,10 @@
 uint32_t ValidationCache::MakeShaderHash(VkShaderModuleCreateInfo const *smci) { return XXH32(smci->pCode, smci->codeSize, 0); }
 
 static ValidationCache *GetValidationCacheInfo(VkShaderModuleCreateInfo const *pCreateInfo) {
-    while ((pCreateInfo = (VkShaderModuleCreateInfo const *)pCreateInfo->pNext) != nullptr) {
-        if (pCreateInfo->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
-            return (ValidationCache *)((VkShaderModuleValidationCacheCreateInfoEXT const *)pCreateInfo)->validationCache;
+    const auto validation_cache_ci = lvl_find_in_chain<VkShaderModuleValidationCacheCreateInfoEXT>(pCreateInfo->pNext);
+    if (validation_cache_ci) {
+        return CastFromHandle<VkValidationCacheEXT, ValidationCache *>(validation_cache_ci->validationCache);
     }
-
     return nullptr;
 }