From 4d94920bce038ce1818a70a7566a82be8dfafd61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 18 Aug 2026 19:42:31 +0200 Subject: [PATCH] Vk: add XFAIL for basically all NoInit tests on GCC 16. Same as what happened with GCC 6.1 for math types already, version 16 with optimizations enabled is apparently able to "see through" the NoInit constructor and discard whatever happened on that placement-new'd memory before. Eh whatever, I just wanted to verify that *I* am not accidentally zero-initing the thing. --- src/Magnum/Vk/Test/BufferTest.cpp | 30 ++++++- src/Magnum/Vk/Test/CommandBufferTest.cpp | 10 ++- src/Magnum/Vk/Test/CommandPoolTest.cpp | 10 ++- src/Magnum/Vk/Test/DescriptorPoolTest.cpp | 10 ++- .../Vk/Test/DescriptorSetLayoutTest.cpp | 20 ++++- src/Magnum/Vk/Test/DeviceTest.cpp | 10 ++- src/Magnum/Vk/Test/FenceTest.cpp | 10 ++- src/Magnum/Vk/Test/FramebufferTest.cpp | 10 ++- src/Magnum/Vk/Test/ImageTest.cpp | 60 ++++++++++++-- src/Magnum/Vk/Test/ImageViewTest.cpp | 10 ++- src/Magnum/Vk/Test/InstanceTest.cpp | 10 ++- src/Magnum/Vk/Test/MemoryTest.cpp | 20 ++++- src/Magnum/Vk/Test/MeshLayoutTest.cpp | 12 ++- src/Magnum/Vk/Test/PipelineLayoutTest.cpp | 10 ++- src/Magnum/Vk/Test/PipelineTest.cpp | 50 ++++++++++-- src/Magnum/Vk/Test/QueueTest.cpp | 10 ++- src/Magnum/Vk/Test/RenderPassTest.cpp | 80 +++++++++++++++++-- src/Magnum/Vk/Test/SamplerTest.cpp | 10 ++- src/Magnum/Vk/Test/ShaderTest.cpp | 6 ++ 19 files changed, 349 insertions(+), 39 deletions(-) diff --git a/src/Magnum/Vk/Test/BufferTest.cpp b/src/Magnum/Vk/Test/BufferTest.cpp index 4eb76267d..950b683d1 100644 --- a/src/Magnum/Vk/Test/BufferTest.cpp +++ b/src/Magnum/Vk/Test/BufferTest.cpp @@ -118,7 +118,15 @@ void BufferTest::createInfoConstructNoInit() { BufferCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) BufferCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -172,7 +180,15 @@ void BufferTest::bufferCopyConstructNoInit() { BufferCopy copy{NoInit}; copy->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(©) BufferCopy{NoInit}; - CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -238,7 +254,15 @@ void BufferTest::copyBufferInfoConstructNoInit() { CopyBufferInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CopyBufferInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/CommandBufferTest.cpp b/src/Magnum/Vk/Test/CommandBufferTest.cpp index 6ae77e627..90fb9225e 100644 --- a/src/Magnum/Vk/Test/CommandBufferTest.cpp +++ b/src/Magnum/Vk/Test/CommandBufferTest.cpp @@ -60,7 +60,15 @@ void CommandBufferTest::beginInfoConstructNoInit() { CommandBufferBeginInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CommandBufferBeginInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/CommandPoolTest.cpp b/src/Magnum/Vk/Test/CommandPoolTest.cpp index c7c67ecff..49a97e70f 100644 --- a/src/Magnum/Vk/Test/CommandPoolTest.cpp +++ b/src/Magnum/Vk/Test/CommandPoolTest.cpp @@ -61,7 +61,15 @@ void CommandPoolTest::createInfoConstructNoInit() { CommandPoolCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CommandPoolCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/DescriptorPoolTest.cpp b/src/Magnum/Vk/Test/DescriptorPoolTest.cpp index ebc4f9317..1c5deb8f1 100644 --- a/src/Magnum/Vk/Test/DescriptorPoolTest.cpp +++ b/src/Magnum/Vk/Test/DescriptorPoolTest.cpp @@ -112,7 +112,15 @@ void DescriptorPoolTest::createInfoConstructNoInit() { DescriptorPoolCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) DescriptorPoolCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp b/src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp index c4f45e17f..627f21267 100644 --- a/src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp +++ b/src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp @@ -130,7 +130,15 @@ void DescriptorSetLayoutTest::bindingConstructNoInit() { DescriptorSetLayoutBinding info{NoInit}; info->pImmutableSamplers = &a; new(&info) DescriptorSetLayoutBinding{NoInit}; - CORRADE_COMPARE(info->pImmutableSamplers, &a); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->pImmutableSamplers, &a); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -257,7 +265,15 @@ void DescriptorSetLayoutTest::createInfoConstructNoInit() { DescriptorSetLayoutCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) DescriptorSetLayoutCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/DeviceTest.cpp b/src/Magnum/Vk/Test/DeviceTest.cpp index d1d884209..9893c0966 100644 --- a/src/Magnum/Vk/Test/DeviceTest.cpp +++ b/src/Magnum/Vk/Test/DeviceTest.cpp @@ -55,7 +55,15 @@ void DeviceTest::createInfoConstructNoInit() { DeviceCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) DeviceCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/FenceTest.cpp b/src/Magnum/Vk/Test/FenceTest.cpp index 6d9a81263..7afb5204d 100644 --- a/src/Magnum/Vk/Test/FenceTest.cpp +++ b/src/Magnum/Vk/Test/FenceTest.cpp @@ -60,7 +60,15 @@ void FenceTest::createInfoConstructNoInit() { FenceCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) FenceCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/FramebufferTest.cpp b/src/Magnum/Vk/Test/FramebufferTest.cpp index b910129b9..c277a28fe 100644 --- a/src/Magnum/Vk/Test/FramebufferTest.cpp +++ b/src/Magnum/Vk/Test/FramebufferTest.cpp @@ -111,7 +111,15 @@ void FramebufferTest::createInfoConstructNoInit() { FramebufferCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) FramebufferCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/ImageTest.cpp b/src/Magnum/Vk/Test/ImageTest.cpp index c85554d91..33db0d589 100644 --- a/src/Magnum/Vk/Test/ImageTest.cpp +++ b/src/Magnum/Vk/Test/ImageTest.cpp @@ -325,7 +325,15 @@ void ImageTest::createInfoConstructNoInit() { ImageCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) ImageCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -408,7 +416,15 @@ void ImageTest::imageCopyConstructNoInit() { ImageCopy copy{NoInit}; copy->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(©) ImageCopy{NoInit}; - CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -504,7 +520,15 @@ void ImageTest::copyImageInfoConstructNoInit() { CopyImageInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CopyImageInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -650,7 +674,15 @@ void ImageTest::bufferImageCopyConstructNoInit() { BufferImageCopy copy{NoInit}; copy->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(©) BufferImageCopy{NoInit}; - CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(copy->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -738,7 +770,15 @@ void ImageTest::copyBufferToImageInfoConstructNoInit() { CopyBufferToImageInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CopyBufferToImageInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -793,7 +833,15 @@ void ImageTest::copyImageToBufferInfoConstructNoInit() { CopyImageToBufferInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) CopyImageToBufferInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/ImageViewTest.cpp b/src/Magnum/Vk/Test/ImageViewTest.cpp index 58f042c9c..82d68cd71 100644 --- a/src/Magnum/Vk/Test/ImageViewTest.cpp +++ b/src/Magnum/Vk/Test/ImageViewTest.cpp @@ -403,7 +403,15 @@ void ImageViewTest::createInfoConstructNoInit() { ImageViewCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) ImageViewCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/InstanceTest.cpp b/src/Magnum/Vk/Test/InstanceTest.cpp index 616d83579..cbdce3548 100644 --- a/src/Magnum/Vk/Test/InstanceTest.cpp +++ b/src/Magnum/Vk/Test/InstanceTest.cpp @@ -56,7 +56,15 @@ void InstanceTest::createInfoConstructNoInit() { info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) InstanceCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/MemoryTest.cpp b/src/Magnum/Vk/Test/MemoryTest.cpp index 7ba450e88..1291f9d5b 100644 --- a/src/Magnum/Vk/Test/MemoryTest.cpp +++ b/src/Magnum/Vk/Test/MemoryTest.cpp @@ -79,7 +79,15 @@ void MemoryTest::requirementsConstructNoInit() { MemoryRequirements requirements{NoInit}; requirements->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&requirements) MemoryRequirements{NoInit}; - CORRADE_COMPARE(requirements->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(requirements->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -133,7 +141,15 @@ void MemoryTest::allocateInfoConstructNoInit() { MemoryAllocateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) MemoryAllocateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/MeshLayoutTest.cpp b/src/Magnum/Vk/Test/MeshLayoutTest.cpp index e90ad42a2..b2b952a28 100644 --- a/src/Magnum/Vk/Test/MeshLayoutTest.cpp +++ b/src/Magnum/Vk/Test/MeshLayoutTest.cpp @@ -198,8 +198,16 @@ void MeshLayoutTest::constructNoInit() { layout.vkPipelineVertexInputStateCreateInfo().sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; layout.vkPipelineInputAssemblyStateCreateInfo().sType = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES; new(&layout) MeshLayout{NoInit}; - CORRADE_COMPARE(layout.vkPipelineVertexInputStateCreateInfo().sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); - CORRADE_COMPARE(layout.vkPipelineInputAssemblyStateCreateInfo().sType, VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(layout.vkPipelineVertexInputStateCreateInfo().sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + CORRADE_COMPARE(layout.vkPipelineInputAssemblyStateCreateInfo().sType, VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/PipelineLayoutTest.cpp b/src/Magnum/Vk/Test/PipelineLayoutTest.cpp index bcd4d2071..a62756661 100644 --- a/src/Magnum/Vk/Test/PipelineLayoutTest.cpp +++ b/src/Magnum/Vk/Test/PipelineLayoutTest.cpp @@ -82,7 +82,15 @@ void PipelineLayoutTest::createInfoConstructNoInit() { PipelineLayoutCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) PipelineLayoutCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/PipelineTest.cpp b/src/Magnum/Vk/Test/PipelineTest.cpp index d8cc01fed..a06a30058 100644 --- a/src/Magnum/Vk/Test/PipelineTest.cpp +++ b/src/Magnum/Vk/Test/PipelineTest.cpp @@ -223,7 +223,15 @@ void PipelineTest::rasterizationCreateInfoConstructNoInit() { RasterizationPipelineCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) RasterizationPipelineCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -580,7 +588,15 @@ void PipelineTest::computeCreateInfoConstructNoInit() { ComputePipelineCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) ComputePipelineCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -621,7 +637,15 @@ void PipelineTest::memoryBarrierConstructNoInit() { MemoryBarrier barrier{NoInit}; barrier->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&barrier) MemoryBarrier{NoInit}; - CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -652,7 +676,15 @@ void PipelineTest::bufferMemoryBarrierConstructNoInit() { BufferMemoryBarrier barrier{NoInit}; barrier->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&barrier) BufferMemoryBarrier{NoInit}; - CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -710,7 +742,15 @@ void PipelineTest::imageMemoryBarrierConstructNoInit() { ImageMemoryBarrier barrier{NoInit}; barrier->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&barrier) ImageMemoryBarrier{NoInit}; - CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(barrier->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/QueueTest.cpp b/src/Magnum/Vk/Test/QueueTest.cpp index 097fce68d..1c0fe79a7 100644 --- a/src/Magnum/Vk/Test/QueueTest.cpp +++ b/src/Magnum/Vk/Test/QueueTest.cpp @@ -119,7 +119,15 @@ void QueueTest::submitInfoConstructNoInit() { SubmitInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) SubmitInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/RenderPassTest.cpp b/src/Magnum/Vk/Test/RenderPassTest.cpp index 23e231b76..7cde82f3f 100644 --- a/src/Magnum/Vk/Test/RenderPassTest.cpp +++ b/src/Magnum/Vk/Test/RenderPassTest.cpp @@ -293,7 +293,15 @@ void RenderPassTest::attachmentDescriptionConstructNoInit() { AttachmentDescription description{NoInit}; description->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&description) AttachmentDescription{NoInit}; - CORRADE_COMPARE(description->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(description->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -376,7 +384,15 @@ void RenderPassTest::attachmentReferenceConstructNoInit() { AttachmentReference reference{NoInit}; reference->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&reference) AttachmentReference{NoInit}; - CORRADE_COMPARE(reference->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(reference->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -436,7 +452,15 @@ void RenderPassTest::subpassDescriptionConstructNoInit() { SubpassDescription description{NoInit}; description->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&description) SubpassDescription{NoInit}; - CORRADE_COMPARE(description->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(description->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -784,7 +808,15 @@ void RenderPassTest::subpassDependencyConstructNoInit() { SubpassDependency dependency{NoInit}; dependency->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&dependency) SubpassDependency{NoInit}; - CORRADE_COMPARE(dependency->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(dependency->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -863,7 +895,15 @@ void RenderPassTest::createInfoConstructNoInit() { RenderPassCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) RenderPassCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -1163,7 +1203,15 @@ void RenderPassTest::beginInfoConstructNoInit() { RenderPassBeginInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) RenderPassBeginInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -1233,7 +1281,15 @@ void RenderPassTest::subpassBeginInfoConstructNoInit() { SubpassBeginInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) SubpassBeginInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); @@ -1258,7 +1314,15 @@ void RenderPassTest::subpassEndInfoConstructNoInit() { SubpassEndInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) SubpassEndInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/SamplerTest.cpp b/src/Magnum/Vk/Test/SamplerTest.cpp index 1f7ea5294..869eef68c 100644 --- a/src/Magnum/Vk/Test/SamplerTest.cpp +++ b/src/Magnum/Vk/Test/SamplerTest.cpp @@ -190,7 +190,15 @@ void SamplerTest::createInfoConstructNoInit() { SamplerCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; new(&info) SamplerCreateInfo{NoInit}; - CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO); + { + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif + CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO); + } CORRADE_VERIFY(std::is_nothrow_constructible::value); diff --git a/src/Magnum/Vk/Test/ShaderTest.cpp b/src/Magnum/Vk/Test/ShaderTest.cpp index 6a7dbffa0..18059609e 100644 --- a/src/Magnum/Vk/Test/ShaderTest.cpp +++ b/src/Magnum/Vk/Test/ShaderTest.cpp @@ -214,6 +214,12 @@ void ShaderTest::createInfoConstructNoInit() { ShaderCreateInfo info{NoInit}; info->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2; new(&info) ShaderCreateInfo{NoInit}; + /* Explicitly check we're not on Clang because certain Clang-based IDEs + inherit __GNUC__ if GCC is used instead of leaving it at 4 like + Clang itself does */ + #if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && __GNUC__ >= 16 && __OPTIMIZE__ + CORRADE_EXPECT_FAIL("GCC 16+ misoptimizes and overwrites the value."); + #endif CORRADE_COMPARE(info->sType, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2); }