https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117514
--- Comment #5 from Jordan <8e3g6jay6 at mozmail dot com> --- Here is the functioning code in case this helps, I was basically transferring in a C char ** but I made the mistake of treating it as a char *. Hopefully this helps debug this strange issue. function check_device_extension_support(physical_device) result(has_support) implicit none !VkPhysicalDevice integer(c_int64_t), intent(in), value :: physical_device logical(c_bool) :: has_support integer(c_int32_t) :: extension_count ! VkExtensionProperties type(vec) :: available_extensions ! character(:) type(vec) :: required_device_extensions type(vk_extension_properties), pointer :: extension_properties character(len = :, kind = c_char), pointer :: required_extension integer(c_int32_t) :: i type(c_ptr), pointer :: raw_c_ptr_ptr type(c_ptr) :: blah if (vk_enumerate_device_extension_properties(physical_device, c_null_ptr, extension_count, c_null_ptr) /= VK_SUCCESS) then error stop "[Vulkan] Error: Failed to enumerate device extension properties." end if ! call create_required_device_extensions(required_device_extensions) required_device_extensions = new_vec(sizeof(c_null_ptr), 0_8) allocate(character(len = 32, kind = c_char) :: required_extension) required_extension = "VK_KHR_SWAPCHAIN_EXTENSION_NAME"//achar(0) blah = c_loc(required_extension) call required_device_extensions%push_back(blah) call c_f_pointer(required_device_extensions%get(1_8), raw_c_ptr_ptr) required_extension => string_from_c(raw_c_ptr_ptr) print*,required_extension ! print*,extension_count ! allocate(extension_properties) ! available_extensions = new_vec(sizeof(extension_properties), 0_8) ! call available_extensions%resize(int(extension_count,c_int64_t), extension_properties) ! deallocate(extension_properties) ! do i = 1,int(available_extensions%size()) ! end do end function check_device_extension_support