layers: Enable Wall and Werror.
diff --git a/buildAndroid/jni/Application.mk b/buildAndroid/jni/Application.mk
index cd749e3..781edd6 100644
--- a/buildAndroid/jni/Application.mk
+++ b/buildAndroid/jni/Application.mk
@@ -17,5 +17,5 @@
 APP_PLATFORM := android-22

 APP_STL := gnustl_static

 APP_MODULES := layer_utils VkLayer_draw_state VkLayer_mem_tracker VkLayer_device_limits VkLayer_image VkLayer_param_checker VkLayer_object_tracker VkLayer_threading VkLayer_swapchain VkLayer_unique_objects VkLayerValidationTests

-APP_CPPFLAGS += -std=c++11 -DVK_PROTOTYPES

-NDK_TOOLCHAIN_VERSION := 4.8

+APP_CPPFLAGS += -std=c++11 -DVK_PROTOTYPES -Wall -Werror -Wno-unused-function -Wno-unused-const-variable

+NDK_TOOLCHAIN_VERSION := clang

diff --git a/generator.py b/generator.py
index 740f66e..3c5a424 100644
--- a/generator.py
+++ b/generator.py
@@ -2550,7 +2550,7 @@
             'vkDestroyDebugReportCallbackEXT',
         ]
         if name in special_functions:
-            self.intercepts += [ '    "%s", (PFN_vkVoidFunction) %s,' % (name,name) ]
+            self.intercepts += [ '    {"%s", reinterpret_cast<PFN_vkVoidFunction>(%s)},' % (name,name) ]
             return
         if "KHR" in name:
             self.appendSection('command', '// TODO - not wrapping KHR function ' + name)
@@ -2563,7 +2563,7 @@
         # record that the function will be intercepted
         if (self.featureExtraProtect != None):
             self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-        self.intercepts += [ '    "%s", (PFN_vkVoidFunction) %s,' % (name,name) ]
+        self.intercepts += [ '    {"%s", reinterpret_cast<PFN_vkVoidFunction>(%s)},' % (name,name) ]
         if (self.featureExtraProtect != None):
             self.intercepts += [ '#endif' ]
 
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 1b15819..b11f34c 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -97,8 +97,6 @@
 
 static unordered_map<void *, layer_data *> layer_data_map;
 
-static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(g_initOnce);
-
 // TODO : This can be much smarter, using separate locks for separate global data
 static int globalLockInitialized = 0;
 static loader_platform_thread_mutex globalLock;
@@ -558,9 +556,11 @@
                             "Cannot enable in occlusion queries in vkBeginCommandBuffer() and set queryFlags to %d which is not a valid combination of VkQueryControlFlagBits.",
                             pInfo->queryFlags);
     }
+    VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
     if (!skipCall)
-        return dev_data->device_dispatch_table->BeginCommandBuffer(commandBuffer, pBeginInfo);
-	return VK_ERROR_VALIDATION_FAILED_EXT;
+        result = dev_data->device_dispatch_table->BeginCommandBuffer(
+            commandBuffer, pBeginInfo);
+    return result;
 }
 
 VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue)
@@ -613,7 +613,6 @@
     const VkCopyDescriptorSet  *pDescriptorCopies)
 {
     layer_data* dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
-    VkResult    result   = VK_ERROR_VALIDATION_FAILED_EXT;
     VkBool32    skipCall = VK_FALSE;
 
     for (uint32_t i = 0; i < descriptorWriteCount; i++) {
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index d73319e..bac580c 100644
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -219,7 +219,6 @@
 // TODO : Do we need to guard access to layer_data_map w/ lock?
 static unordered_map<void*, layer_data*> layer_data_map;
 
-static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(g_initOnce);
 // TODO : This can be much smarter, using separate locks for separate global data
 static int globalLockInitialized = 0;
 static loader_platform_thread_mutex globalLock;
@@ -1362,7 +1361,6 @@
     /* We seem to allow pipeline stages to be specified out of order, so collect and identify them
      * before trying to do anything more: */
     int vertex_stage = get_shader_stage_id(VK_SHADER_STAGE_VERTEX_BIT);
-    int geometry_stage = get_shader_stage_id(VK_SHADER_STAGE_GEOMETRY_BIT);
     int fragment_stage = get_shader_stage_id(VK_SHADER_STAGE_FRAGMENT_BIT);
 
     shader_module **shaders = new shader_module*[fragment_stage + 1];  /* exclude CS */
@@ -1910,9 +1908,10 @@
         case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:
             // TODO : Need to understand this case better and make sure code is correct
             return ((VkCopyDescriptorSet*)pUpdateStruct)->descriptorCount;
+        default:
+            return 0;
     }
-
-	return 0;
+    return 0;
 }
 
 // For given Layout Node and binding, return index where that binding begins
@@ -1999,10 +1998,6 @@
     VkBool32 skipCall = VK_FALSE;
     VkWriteDescriptorSet* pWDS = NULL;
     VkCopyDescriptorSet* pCDS = NULL;
-    size_t array_size = 0;
-    size_t base_array_size = 0;
-    size_t total_array_size = 0;
-    size_t baseBuffAddr = 0;
     switch (pUpdate->sType)
     {
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
@@ -2177,11 +2172,7 @@
 {
     VkBool32 skipCall = VK_FALSE;
     // First verify that for the given Descriptor type, the correct DescriptorInfo data is supplied
-    VkBufferView* pBufferView = NULL;
     const VkSampler* pSampler = NULL;
-    VkImageView* pImageView = NULL;
-    VkImageLayout* pImageLayout = NULL;
-    VkDescriptorBufferInfo* pBufferInfo = NULL;
     VkBool32 immutable = VK_FALSE;
     uint32_t i = 0;
     // For given update type, verify that update contents are correct
@@ -2235,6 +2226,8 @@
                 skipCall |= validateBufferInfo(my_data, &(pWDS->pBufferInfo[i]));
             }
             break;
+        default:
+            break;
     }
     return skipCall;
 }
@@ -2464,10 +2457,7 @@
     while(pShadowUpdate) {
         pFreeUpdate = pShadowUpdate;
         pShadowUpdate = (GENERIC_HEADER*)pShadowUpdate->pNext;
-        uint32_t index = 0;
         VkWriteDescriptorSet * pWDS = NULL;
-        VkCopyDescriptorSet * pCDS = NULL;
-        void** ppToFree = NULL;
         switch (pFreeUpdate->sType)
         {
             case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
@@ -2873,7 +2863,6 @@
 static VkBool32 printDSConfig(layer_data* my_data, const VkCommandBuffer cb)
 {
     VkBool32 skipCall = VK_FALSE;
-    char ds_config_str[1024*256] = {0}; // TODO : Currently making this buffer HUGE w/o overrun protection.  Need to be smarter, start smaller, and grow as needed.
     GLOBAL_CB_NODE* pCB = getCBNode(my_data, cb);
     if (pCB && pCB->lastBoundDescriptorSet) {
         SET_NODE* pSet = getSetNode(my_data, pCB->lastBoundDescriptorSet);
@@ -3806,7 +3795,6 @@
 VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator)
 {
     layer_data* dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
-    VkBool32 skip_call = VK_FALSE;
     loader_platform_thread_lock_mutex(&globalLock);
     if (!validateIdleBuffer(dev_data, buffer)) {
         loader_platform_thread_unlock_mutex(&globalLock);
diff --git a/layers/draw_state.h b/layers/draw_state.h
index f815a11..8e8cd2e 100755
--- a/layers/draw_state.h
+++ b/layers/draw_state.h
@@ -319,7 +319,7 @@
                 const uint32_t att = subpass->pColorAttachments[j].attachment;
                 const VkFormat format = pCreateInfo->pAttachments[att].format;
 
-                color_formats.push_back(pCreateInfo->pAttachments[att].format);
+                color_formats.push_back(format);
             }
 
             subpassColorFormats.push_back(color_formats);
@@ -412,10 +412,11 @@
     vector<uint32_t>           maxDescriptorTypeCount; // max # of descriptors of each type in this pool
     vector<uint32_t>           availableDescriptorTypeCount; // available # of descriptors of each type in this pool
 
-    _DESCRIPTOR_POOL_NODE(const VkDescriptorPool pool, const VkDescriptorPoolCreateInfo* pCreateInfo) :
-    pool(pool), createInfo(*pCreateInfo), maxSets(pCreateInfo->maxSets), pSets(NULL),
-    maxDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE), availableDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE)
-    {
+    _DESCRIPTOR_POOL_NODE(const VkDescriptorPool pool,
+                          const VkDescriptorPoolCreateInfo *pCreateInfo)
+        : pool(pool), maxSets(pCreateInfo->maxSets), createInfo(*pCreateInfo),
+          pSets(NULL), maxDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE),
+          availableDescriptorTypeCount(VK_DESCRIPTOR_TYPE_RANGE_SIZE) {
         if (createInfo.poolSizeCount) { // Shadow type struct from ptr into local struct
             size_t poolSizeCountSize = createInfo.poolSizeCount * sizeof(VkDescriptorPoolSize);
             createInfo.pPoolSizes = new VkDescriptorPoolSize[poolSizeCountSize];
diff --git a/layers/image.cpp b/layers/image.cpp
index a40b2f2..62c4284 100644
--- a/layers/image.cpp
+++ b/layers/image.cpp
@@ -343,7 +343,7 @@
 {
     VkBool32                skipCall              = VK_FALSE;
     VkResult                result                = VK_ERROR_VALIDATION_FAILED_EXT;
-    VkImageFormatProperties ImageFormatProperties = {0};
+    VkImageFormatProperties ImageFormatProperties;
 
     layer_data       *device_data    = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
     VkPhysicalDevice  physicalDevice = device_data->physicalDevice;
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index 196596a..a7e8c29 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -52,7 +52,6 @@
 #include "vk_layer_table.h"
 #include "vk_layer_data.h"
 #include "vk_layer_logging.h"
-static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(g_initOnce);
 
 // WSI Image Objects bypass usual Image Object creation methods.  A special Memory
 // Object value will be used to identify them internally.
@@ -127,6 +126,8 @@
                 return &(*it).second;
             break;
         }
+        default:
+            break;
     }
     return retValue;
 }
@@ -229,6 +230,8 @@
             pCI->mem = mem;
             break;
         }
+        default:
+            break;
     }
 }
 
@@ -270,6 +273,8 @@
                 const_cast<VkSwapchainCreateInfoKHR*>(static_cast<const VkSwapchainCreateInfoKHR *>(pCreateInfo))->imageUsage;
             break;
         }
+        default:
+            break;
     }
 }
 
@@ -898,7 +903,6 @@
                 pInfo->refCount++;
             }
             // Need to set mem binding for this object
-            MT_MEM_OBJ_INFO* pPrevBinding = get_mem_obj_info(my_data, pObjBindInfo->mem);
             pObjBindInfo->mem = mem;
         }
     }
diff --git a/layers/object_tracker.h b/layers/object_tracker.h
index 1f2b41a..33202e9 100644
--- a/layers/object_tracker.h
+++ b/layers/object_tracker.h
@@ -495,24 +495,6 @@
 extern unordered_map<uint64_t, OBJTRACK_NODE*> VkSwapchainKHRMap;
 extern unordered_map<uint64_t, OBJTRACK_NODE*> VkSurfaceKHRMap;
 
-static VkBool32 set_status(VkQueue dispatchable_object, VkFence object, VkDebugReportObjectTypeEXT objType, ObjectStatusFlags status_flag)
-{
-    VkBool32 skipCall = VK_FALSE;
-    if (object != VK_NULL_HANDLE) {
-        if (VkFenceMap.find((uint64_t)(object)) != VkFenceMap.end()) {
-            OBJTRACK_NODE* pNode = VkFenceMap[(uint64_t)(object)];
-            pNode->status |= status_flag;
-        }
-        else {
-            // If we do not find it print an error
-            skipCall |= log_msg(mdd(dispatchable_object), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT) 0, (uint64_t) object, __LINE__, OBJTRACK_NONE, "OBJTRACK",
-                "Unable to set status for non-existent object 0x%" PRIxLEAST64 " of %s type",
-                (uint64_t)(object), string_VkDebugReportObjectTypeEXT(objType));
-        }
-    }
-    return skipCall;
-}
-
 static void create_physical_device(VkInstance dispatchable_object, VkPhysicalDevice vkObj, VkDebugReportObjectTypeEXT objType)
 {
     log_msg(mdd(dispatchable_object), VK_DEBUG_REPORT_INFO_BIT_EXT, objType, reinterpret_cast<uint64_t>(vkObj), __LINE__, OBJTRACK_NONE, "OBJTRACK",
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 7f08594..3aa0f56 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -4053,10 +4053,9 @@
         "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
         return false;
     }
-    if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
-        pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
-        pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
-    {
+    if (pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
+        (pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
+         pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)) {
         log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
         "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
         return false;
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp
index de9fc77..1e233e9 100644
--- a/layers/swapchain.cpp
+++ b/layers/swapchain.cpp
@@ -1044,7 +1044,6 @@
     VkBool32 skipCall = VK_FALSE;
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
     loader_platform_thread_lock_mutex(&globalLock);
-    SwpInstance *pInstance = &(my_data->instanceMap[instance]);
     SwpSurface *pSurface = &my_data->surfaceMap[surface];
 
     // Regardless of skipCall value, do some internal cleanup:
@@ -1502,7 +1501,6 @@
 {
 // TODO: Validate cases of re-creating a swapchain (the current code
 // assumes a new swapchain is being created).
-    VkResult result = VK_SUCCESS;
     VkBool32 skipCall = VK_FALSE;
     layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
     char fn[] = "vkCreateSwapchainKHR";
@@ -2207,7 +2205,6 @@
     for (uint32_t i = 0;
          pPresentInfo && (i < pPresentInfo->swapchainCount);
          i++) {
-        uint32_t swapchainCount = pPresentInfo->swapchainCount;
         uint32_t index = pPresentInfo->pImageIndices[i];
         SwpSwapchain *pSwapchain =
             &my_data->swapchainMap[pPresentInfo->pSwapchains[i]];
diff --git a/layers/vk_layer_table.cpp b/layers/vk_layer_table.cpp
index 3cee6dd..9277a8d 100644
--- a/layers/vk_layer_table.cpp
+++ b/layers/vk_layer_table.cpp
@@ -1,6 +1,7 @@
 /* Copyright (c) 2015-2016 The Khronos Group Inc.
  * Copyright (c) 2015-2016 Valve Corporation
  * Copyright (c) 2015-2016 LunarG, Inc.
+ * Copyright (c) 2015-2016 Google, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and/or associated documentation files (the "Materials"), to
@@ -63,8 +64,8 @@
 
 void destroy_dispatch_table(device_table_map &map, dispatch_key key)
 {
-    device_table_map::const_iterator it = map.find((void *) key);
 #if DISPATCH_MAP_DEBUG
+    device_table_map::const_iterator it = map.find((void *)key);
     if (it != map.end()) {
         fprintf(stderr, "destroy device dispatch_table: map: %p, key: %p, table: %p\n", &map, key, it->second);
     } else {
@@ -77,8 +78,8 @@
 
 void destroy_dispatch_table(instance_table_map &map, dispatch_key key)
 {
-    instance_table_map::const_iterator it = map.find((void *) key);
 #if DISPATCH_MAP_DEBUG
+    instance_table_map::const_iterator it = map.find((void *)key);
     if (it != map.end()) {
         fprintf(stderr, "destroy instance dispatch_table: map: %p, key: %p, table: %p\n", &map, key, it->second);
     } else {
diff --git a/layers/vk_layer_utils.cpp b/layers/vk_layer_utils.cpp
index 59c4222..e1612fd 100644
--- a/layers/vk_layer_utils.cpp
+++ b/layers/vk_layer_utils.cpp
@@ -613,7 +613,6 @@
 VkStringErrorFlags vk_string_validate(const int max_length, const char *utf8)
 {
     VkStringErrorFlags result = VK_STRING_ERROR_NONE;
-    int                code;
     int                num_char_bytes;
     int                i,j;
 
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 1e04881..64928cb 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -2,6 +2,7 @@
  * Copyright (c) 2015-2016 The Khronos Group Inc.
  * Copyright (c) 2015-2016 Valve Corporation
  * Copyright (c) 2015-2016 LunarG, Inc.
+ * Copyright (c) 2015-2016 Google, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and/or associated documentation files (the "Materials"), to
@@ -3564,7 +3565,8 @@
     // Renderpass is started here
     BeginCommandBuffer();
 
-    VkClearColorValue clear_color = {0};
+    VkClearColorValue clear_color;
+    memset(clear_color.uint32, 0, sizeof(uint32_t) * 4);
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
     const VkFormat tex_format = VK_FORMAT_B8G8R8A8_UNORM;
     const int32_t tex_width = 32;
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 4b06170..c99bb02 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -2,6 +2,7 @@
  * Copyright (c) 2015-2016 The Khronos Group Inc.
  * Copyright (c) 2015-2016 Valve Corporation
  * Copyright (c) 2015-2016 LunarG, Inc.
+ * Copyright (c) 2015-2016 Google, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and/or associated documentation files (the "Materials"), to
@@ -669,7 +670,7 @@
                       VkMemoryPropertyFlags reqs) {
     uint32_t mipCount;
     VkFormatProperties image_fmt;
-    VkImageTiling tiling;
+    VkImageTiling tiling = VK_IMAGE_TILING_OPTIMAL;
 
     mipCount = 0;
 
@@ -702,7 +703,7 @@
             << "Error: Cannot find requested tiling configuration";
     }
 
-    VkImageFormatProperties imageFormatProperties = {0};
+    VkImageFormatProperties imageFormatProperties;
     vkGetPhysicalDeviceImageFormatProperties(m_device->phy().handle(), fmt,
                                              VK_IMAGE_TYPE_2D, tiling, usage,
                                              0, // VkImageCreateFlags
diff --git a/tests/vktestframeworkandroid.cpp b/tests/vktestframeworkandroid.cpp
index 692472c..c4b5e9c 100644
--- a/tests/vktestframeworkandroid.cpp
+++ b/tests/vktestframeworkandroid.cpp
@@ -59,6 +59,7 @@
                                 std::vector<unsigned int> &spv)
 {
     assert(false);
+    return false;
 }
 
 void VkTestFramework::InitArgs(int *argc, char *argv[]) {}
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index a9145dc..f7e0680 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -792,8 +792,6 @@
 #       NOTE:  The non-autoGenerated code is in the object_tracker.h header file
         header_txt.append('#include "object_tracker.h"')
         header_txt.append('')
-        header_txt.append('static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(initOnce);')
-        header_txt.append('')
         return "\n".join(header_txt)
 
     def generate_maps(self):
@@ -1430,8 +1428,6 @@
         header_txt = []
         header_txt.append('%s' % self.lineinfo.get())
         header_txt.append('#include "unique_objects.h"')
-        header_txt.append('')
-        header_txt.append('static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(initOnce);')
         return "\n".join(header_txt)
 
     # Generate UniqueObjects code for given struct_uses dict of objects that need to be unwrapped
diff --git a/vk_helper.py b/vk_helper.py
index af37980..d2dfabd 100755
--- a/vk_helper.py
+++ b/vk_helper.py
@@ -916,8 +916,9 @@
                             sh_funcs.append('%sif ((pStruct->descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) ||' % (indent))
                             sh_funcs.append('%s    (pStruct->descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER))  {' % (indent))
                             indent += '    '
-                        sh_funcs.append('%sif (pStruct->%s) {' % (indent, stp_list[index]['name']))
-                        indent += '    '
+                        if stp_list[index]['dyn_array']:
+                            sh_funcs.append('%sif (pStruct->%s) {' % (indent, stp_list[index]['name']))
+                            indent += '    '
                         sh_funcs.append('%sfor (uint32_t i = 0; i < %s; i++) {' % (indent, array_count))
                         indent += '    '
                         sh_funcs.append('%sindex_ss.str("");' % (indent))
@@ -950,8 +951,9 @@
                         sh_funcs.append('%sss[%u].str("");' % (indent, index))
                         indent = indent[4:]
                         sh_funcs.append('%s}' % (indent))
-                        indent = indent[4:]
-                        sh_funcs.append('%s}' % (indent))
+                        if stp_list[index]['dyn_array']:
+                            indent = indent[4:]
+                            sh_funcs.append('%s}' % (indent))
                         #endif
                         if (stp_list[index]['name'] == 'pQueueFamilyIndices') or (stp_list[index]['name'] == 'pImageInfo') or (stp_list[index]['name'] == 'pBufferInfo') or (stp_list[index]['name'] == 'pTexelBufferView'):
                             indent = indent[4:]
@@ -1022,10 +1024,7 @@
                         sh_funcs.append('        ss[%u].str("address");' % (index))
                     elif 'char' in self.struct_dict[s][m]['type'].lower() and self.struct_dict[s][m]['ptr']:
                         sh_funcs.append('%s' % lineinfo.get())
-                        sh_funcs.append('    if (NULL != pStruct->%s)' % (self.struct_dict[s][m]['name']))
-                        sh_funcs.append('        ss[%u] << pStruct->%s;' % (index, self.struct_dict[s][m]['name']))
-                        sh_funcs.append('    else')
-                        sh_funcs.append('        ss[%u].str("");' % (index))
+                        sh_funcs.append('    ss[%u] << pStruct->%s;' % (index, self.struct_dict[s][m]['name']))
                     else:
                         sh_funcs.append('%s' % lineinfo.get())
                         (po, pa) = self._get_struct_print_formatted(self.struct_dict[s][m])