diff --git a/src/Device/BC_Decoder.cpp b/src/Device/BC_Decoder.cpp
index cf16e44..1fd7ebe 100644
--- a/src/Device/BC_Decoder.cpp
+++ b/src/Device/BC_Decoder.cpp
@@ -1447,7 +1447,7 @@
 
 	void decode(uint8_t *dst, int dstX, int dstY, int dstWidth, int dstHeight, size_t dstPitch) const
 	{
-		auto const &mode = this->mode();
+		const auto &mode = this->mode();
 
 		if(mode.IDX < 0)  // Invalid mode:
 		{
@@ -1507,8 +1507,8 @@
 			}
 		}
 
-		auto const colorBits = mode.CB + mode.SPB + mode.EPB;
-		auto const alphaBits = mode.AB + mode.SPB + mode.EPB;
+		const auto colorBits = mode.CB + mode.SPB + mode.EPB;
+		const auto alphaBits = mode.AB + mode.SPB + mode.EPB;
 
 		for(int i = 0; i < mode.NS; i++)
 		{
@@ -1538,7 +1538,7 @@
 				ASSERT(partitionIdx < MaxPartitions);
 				auto subsetIdx = subsetIndex(mode, partitionIdx, texelIdx);
 				ASSERT(subsetIdx < MaxSubsets);
-				auto const &subset = subsets[subsetIdx];
+				const auto &subset = subsets[subsetIdx];
 
 				auto anchorIdx = anchorIndex(mode, partitionIdx, subsetIdx);
 				auto isAnchor = anchorIdx == texelIdx;
diff --git a/src/Device/Context.cpp b/src/Device/Context.cpp
index ef80f03..ebb58d5 100644
--- a/src/Device/Context.cpp
+++ b/src/Device/Context.cpp
@@ -284,7 +284,7 @@
 	VkVertexInputRate inputRates[MAX_VERTEX_INPUT_BINDINGS];
 	for(uint32_t i = 0; i < vertexInputState->vertexBindingDescriptionCount; i++)
 	{
-		auto const &desc = vertexInputState->pVertexBindingDescriptions[i];
+		const auto &desc = vertexInputState->pVertexBindingDescriptions[i];
 		inputRates[desc.binding] = desc.inputRate;
 		vertexStrides[desc.binding] = desc.inputRate == VK_VERTEX_INPUT_RATE_VERTEX ? desc.stride : 0;
 		instanceStrides[desc.binding] = desc.inputRate == VK_VERTEX_INPUT_RATE_INSTANCE ? desc.stride : 0;
@@ -292,7 +292,7 @@
 
 	for(uint32_t i = 0; i < vertexInputState->vertexAttributeDescriptionCount; i++)
 	{
-		auto const &desc = vertexInputState->pVertexAttributeDescriptions[i];
+		const auto &desc = vertexInputState->pVertexAttributeDescriptions[i];
 		sw::Stream &input = stream[desc.location];
 		input.format = desc.format;
 		input.offset = desc.offset;
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index 4c3919b..34e5289 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -551,9 +551,9 @@
 {
 	draw->setup();
 
-	auto const numPrimitives = draw->numPrimitives;
-	auto const numPrimitivesPerBatch = draw->numPrimitivesPerBatch;
-	auto const numBatches = draw->numBatches;
+	const auto numPrimitives = draw->numPrimitives;
+	const auto numPrimitivesPerBatch = draw->numPrimitivesPerBatch;
+	const auto numBatches = draw->numBatches;
 
 	auto ticket = tickets->take();
 	auto finally = marl::make_shared_finally([device, draw, ticket] {
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index 68d9bf4..930cd3d 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -205,7 +205,7 @@
 				int packedInterpolant = 0;
 				for(int interfaceInterpolant = 0; interfaceInterpolant < MAX_INTERFACE_COMPONENTS; interfaceInterpolant++)
 				{
-					auto const &input = spirvShader->inputs[interfaceInterpolant];
+					const auto &input = spirvShader->inputs[interfaceInterpolant];
 					if(input.Type != SpirvShader::ATTRIBTYPE_UNUSED)
 					{
 						routine.inputsInterpolation[packedInterpolant] = input.Flat ? SpirvRoutine::Flat : (input.NoPerspective ? SpirvRoutine::Linear : SpirvRoutine::Perspective);
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index ee3e1a5..2357a52 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -196,8 +196,8 @@
 		case spv::OpGroupDecorate:
 			{
 				uint32_t group = insn.word(1);
-				auto const &groupDecorations = decorations[group];
-				auto const &descriptorGroupDecorations = descriptorDecorations[group];
+				const auto &groupDecorations = decorations[group];
+				const auto &descriptorGroupDecorations = descriptorDecorations[group];
 				for(auto i = 2u; i < insn.wordCount(); i++)
 				{
 					// Remaining operands are targets to apply the group to.
@@ -210,7 +210,7 @@
 
 		case spv::OpGroupMemberDecorate:
 			{
-				auto const &srcDecorations = decorations[insn.word(1)];
+				const auto &srcDecorations = decorations[insn.word(1)];
 				for(auto i = 2u; i < insn.wordCount(); i += 2)
 				{
 					// remaining operands are pairs of <id>, literal for members to apply to.
@@ -1165,7 +1165,7 @@
 
 	ApplyDecorationsForId(&d, id);
 
-	auto const &obj = getType(id);
+	const auto &obj = getType(id);
 	switch(obj.opcode())
 	{
 	case spv::OpTypePointer:
diff --git a/src/Pipeline/SpirvShaderControlFlow.cpp b/src/Pipeline/SpirvShaderControlFlow.cpp
index 2624032..2377ef5 100644
--- a/src/Pipeline/SpirvShaderControlFlow.cpp
+++ b/src/Pipeline/SpirvShaderControlFlow.cpp
@@ -236,7 +236,7 @@
 	{
 		auto id = pending.front();
 
-		auto const &block = function.getBlock(id);
+		const auto &block = function.getBlock(id);
 		if(id == ignore)
 		{
 			pending.pop_front();
diff --git a/src/Pipeline/SpirvShaderDebugger.cpp b/src/Pipeline/SpirvShaderDebugger.cpp
index cedd6e1..0bd8368 100644
--- a/src/Pipeline/SpirvShaderDebugger.cpp
+++ b/src/Pipeline/SpirvShaderDebugger.cpp
@@ -2198,7 +2198,7 @@
 	auto debugger = state->debugger;
 
 	// Update the thread frames from the stack of scopes
-	auto const &locationAndScope = debugger->traps.byIndex[index];
+	const auto &locationAndScope = debugger->traps.byIndex[index];
 
 	if(locationAndScope.scope)
 	{
diff --git a/src/Pipeline/SpirvShaderMemory.cpp b/src/Pipeline/SpirvShaderMemory.cpp
index 9b27561..2ebb0d1 100644
--- a/src/Pipeline/SpirvShaderMemory.cpp
+++ b/src/Pipeline/SpirvShaderMemory.cpp
@@ -314,7 +314,7 @@
 void SpirvShader::VisitMemoryObjectInner(sw::SpirvShader::Type::ID id, sw::SpirvShader::Decorations d, uint32_t &index, uint32_t offset, bool resultIsPointer, const MemoryVisitor &f) const
 {
 	ApplyDecorationsForId(&d, id);
-	auto const &type = getType(id);
+	const auto &type = getType(id);
 
 	if(d.HasOffset)
 	{
@@ -385,7 +385,7 @@
 void SpirvShader::VisitMemoryObject(Object::ID id, bool resultIsPointer, const MemoryVisitor &f) const
 {
 	auto typeId = getObject(id).typeId();
-	auto const &type = getType(typeId);
+	const auto &type = getType(typeId);
 
 	if(IsExplicitLayout(type.storageClass))
 	{
diff --git a/src/Pipeline/SpirvShaderSpec.cpp b/src/Pipeline/SpirvShaderSpec.cpp
index fc4806a..15cd385 100644
--- a/src/Pipeline/SpirvShaderSpec.cpp
+++ b/src/Pipeline/SpirvShaderSpec.cpp
@@ -68,10 +68,10 @@
 	case spv::OpSelect:
 		{
 			auto &result = CreateConstant(insn);
-			auto const &cond = getObject(insn.word(4));
+			const auto &cond = getObject(insn.word(4));
 			auto condIsScalar = (getType(cond).componentCount == 1);
-			auto const &left = getObject(insn.word(5));
-			auto const &right = getObject(insn.word(6));
+			const auto &left = getObject(insn.word(5));
+			const auto &right = getObject(insn.word(6));
 
 			for(auto i = 0u; i < getType(result).componentCount; i++)
 			{
@@ -84,7 +84,7 @@
 	case spv::OpCompositeExtract:
 		{
 			auto &result = CreateConstant(insn);
-			auto const &compositeObject = getObject(insn.word(4));
+			const auto &compositeObject = getObject(insn.word(4));
 			auto firstComponent = WalkLiteralAccessChain(compositeObject.typeId(), Span(insn, 5, insn.wordCount() - 5));
 
 			for(auto i = 0u; i < getType(result).componentCount; i++)
@@ -97,8 +97,8 @@
 	case spv::OpCompositeInsert:
 		{
 			auto &result = CreateConstant(insn);
-			auto const &newPart = getObject(insn.word(4));
-			auto const &oldObject = getObject(insn.word(5));
+			const auto &newPart = getObject(insn.word(4));
+			const auto &oldObject = getObject(insn.word(5));
 			auto firstNewComponent = WalkLiteralAccessChain(result.typeId(), Span(insn, 6, insn.wordCount() - 6));
 
 			// old components before
@@ -122,8 +122,8 @@
 	case spv::OpVectorShuffle:
 		{
 			auto &result = CreateConstant(insn);
-			auto const &firstHalf = getObject(insn.word(4));
-			auto const &secondHalf = getObject(insn.word(5));
+			const auto &firstHalf = getObject(insn.word(4));
+			const auto &secondHalf = getObject(insn.word(5));
 
 			for(auto i = 0u; i < getType(result).componentCount; i++)
 			{
@@ -158,7 +158,7 @@
 	auto &result = CreateConstant(insn);
 
 	auto opcode = static_cast<spv::Op>(insn.word(3));
-	auto const &lhs = getObject(insn.word(4));
+	const auto &lhs = getObject(insn.word(4));
 	auto size = getType(lhs).componentCount;
 
 	for(auto i = 0u; i < size; i++)
@@ -208,8 +208,8 @@
 	auto &result = CreateConstant(insn);
 
 	auto opcode = static_cast<spv::Op>(insn.word(3));
-	auto const &lhs = getObject(insn.word(4));
-	auto const &rhs = getObject(insn.word(5));
+	const auto &lhs = getObject(insn.word(4));
+	const auto &rhs = getObject(insn.word(5));
 	auto size = getType(lhs).componentCount;
 
 	for(auto i = 0u; i < size; i++)
diff --git a/src/Pipeline/VertexRoutine.cpp b/src/Pipeline/VertexRoutine.cpp
index 7877eee..44e1b15 100644
--- a/src/Pipeline/VertexRoutine.cpp
+++ b/src/Pipeline/VertexRoutine.cpp
@@ -163,7 +163,7 @@
 		auto count = spirvShader->getNumOutputCullDistances();
 		for(uint32_t i = 0; i < count; i++)
 		{
-			auto const &distance = routine.getVariable(it->second.Id)[it->second.FirstComponent + i];
+			const auto &distance = routine.getVariable(it->second.Id)[it->second.FirstComponent + i];
 			auto mask = SignMask(CmpGE(distance, SIMD::Float(0)));
 			cullMask &= mask;
 		}
diff --git a/src/Reactor/LLVMReactorDebugInfo.cpp b/src/Reactor/LLVMReactorDebugInfo.cpp
index 8ea6881..e0d2da7 100644
--- a/src/Reactor/LLVMReactorDebugInfo.cpp
+++ b/src/Reactor/LLVMReactorDebugInfo.cpp
@@ -136,7 +136,7 @@
 
 void DebugInfo::EmitLocation()
 {
-	auto const &backtrace = getCallerBacktrace();
+	const auto &backtrace = getCallerBacktrace();
 	syncScope(backtrace);
 	builder->SetCurrentDebugLocation(getLocation(backtrace, backtrace.size() - 1));
 	emitPrintLocation(backtrace);
@@ -175,8 +175,8 @@
 	for(size_t i = 0; i < diScope.size(); i++)
 	{
 		auto &scope = diScope[i];
-		auto const &oldLocation = scope.location;
-		auto const &newLocation = backtrace[i];
+		const auto &oldLocation = scope.location;
+		const auto &newLocation = backtrace[i];
 
 		if(oldLocation.function != newLocation.function)
 		{
@@ -246,12 +246,12 @@
 
 void DebugInfo::EmitVariable(Value *variable)
 {
-	auto const &backtrace = getCallerBacktrace();
+	const auto &backtrace = getCallerBacktrace();
 	syncScope(backtrace);
 
 	for(int i = backtrace.size() - 1; i >= 0; i--)
 	{
-		auto const &location = backtrace[i];
+		const auto &location = backtrace[i];
 		auto tokens = getOrParseFileTokens(location.function.file.c_str());
 		auto tokIt = tokens->find(location.line);
 		if(tokIt == tokens->end())
@@ -317,7 +317,7 @@
 
 void DebugInfo::emitPending(Scope &scope, IRBuilder *builder)
 {
-	auto const &pending = scope.pending;
+	const auto &pending = scope.pending;
 	if(pending.value == nullptr)
 	{
 		return;
diff --git a/src/Vulkan/Debug/Server.cpp b/src/Vulkan/Debug/Server.cpp
index d379927..4790ac4 100644
--- a/src/Vulkan/Debug/Server.cpp
+++ b/src/Vulkan/Debug/Server.cpp
@@ -102,7 +102,7 @@
 		    DAP_LOG("SetFunctionBreakpointsRequest receieved");
 
 		    dap::SetFunctionBreakpointsResponse response;
-		    for(auto const &reqBP : req.breakpoints)
+		    for(const auto &reqBP : req.breakpoints)
 		    {
 			    DAP_LOG("Setting breakpoint for function '%s'", reqBP.name.c_str());
 
@@ -116,7 +116,7 @@
 		    {
 			    auto lock = ctx->lock();
 			    lock.clearFunctionBreakpoints();
-			    for(auto const &reqBP : req.breakpoints)
+			    for(const auto &reqBP : req.breakpoints)
 			    {
 				    lock.addFunctionBreakpoint(reqBP.name.c_str());
 			    }
@@ -133,7 +133,7 @@
 		    size_t numBreakpoints = 0;
 		    if(req.breakpoints.has_value())
 		    {
-			    auto const &breakpoints = req.breakpoints.value();
+			    const auto &breakpoints = req.breakpoints.value();
 			    numBreakpoints = breakpoints.size();
 			    if(auto file = this->file(req.source))
 			    {
@@ -161,7 +161,7 @@
 			    {
 				    std::vector<int> lines;
 				    lines.reserve(breakpoints.size());
-				    for(auto const &bp : breakpoints)
+				    for(const auto &bp : breakpoints)
 				    {
 					    lines.push_back(bp.line);
 				    }
@@ -229,8 +229,8 @@
 		    response.stackFrames.reserve(stack.size());
 		    for(int i = static_cast<int>(stack.size()) - 1; i >= 0; i--)
 		    {
-			    auto const &frame = stack[i];
-			    auto const &loc = frame.location;
+			    const auto &frame = stack[i];
+			    const auto &loc = frame.location;
 			    dap::StackFrame sf;
 			    sf.column = 0;
 			    sf.id = frame.id.value();
@@ -455,7 +455,7 @@
 				frame->hovers->variables,
 			};
 
-			for(auto const &vars : variables)
+			for(const auto &vars : variables)
 			{
 				if(auto val = vars->get(req.expression))
 				{
@@ -469,7 +469,7 @@
 			// TODO: This might be a configuration problem of the SPIRV-Tools
 			// spirv-ls plugin. Investigate.
 			auto withPercent = "%" + req.expression;
-			for(auto const &vars : variables)
+			for(const auto &vars : variables)
 			{
 				if(auto val = vars->get(withPercent))
 				{
diff --git a/src/Vulkan/Debug/Variable.hpp b/src/Vulkan/Debug/Variable.hpp
index cbc8d51..792be63 100644
--- a/src/Vulkan/Debug/Variable.hpp
+++ b/src/Vulkan/Debug/Variable.hpp
@@ -155,7 +155,7 @@
 std::shared_ptr<Value> VariableContainer::get(const std::string &name)
 {
 	marl::lock lock(mutex);
-	for(auto const &var : variables)
+	for(const auto &var : variables)
 	{
 		if(var.name == name)
 		{
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 841169e..58ad34d 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -306,7 +306,7 @@
 
 	void execute(vk::CommandBuffer::ExecutionState &executionState) override
 	{
-		auto const &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_COMPUTE];
+		const auto &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_COMPUTE];
 
 		vk::ComputePipeline *pipeline = static_cast<vk::ComputePipeline *>(pipelineState.pipeline);
 		pipeline->run(baseGroupX, baseGroupY, baseGroupZ,
@@ -341,7 +341,7 @@
 	{
 		const auto *cmd = reinterpret_cast<VkDispatchIndirectCommand const *>(buffer->getOffsetPointer(offset));
 
-		auto const &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_COMPUTE];
+		const auto &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_COMPUTE];
 
 		auto *pipeline = static_cast<vk::ComputePipeline *>(pipelineState.pipeline);
 		pipeline->run(0, 0, 0, cmd->x, cmd->y, cmd->z,
@@ -917,7 +917,7 @@
 	void draw(vk::CommandBuffer::ExecutionState &executionState, bool indexed,
 	          uint32_t count, uint32_t instanceCount, uint32_t first, int32_t vertexOffset, uint32_t firstInstance)
 	{
-		auto const &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_GRAPHICS];
+		const auto &pipelineState = executionState.pipelineState[VK_PIPELINE_BIND_POINT_GRAPHICS];
 
 		auto *pipeline = static_cast<vk::GraphicsPipeline *>(pipelineState.pipeline);
 		bool hasDynamicVertexStride = pipeline->hasDynamicVertexStride();
@@ -2379,7 +2379,7 @@
 
 	if(renderPass)
 	{
-		auto const &subpass = renderPass->getSubpass(subpassIndex);
+		const auto &subpass = renderPass->getSubpass(subpassIndex);
 
 		for(auto i = 0u; i < subpass.colorAttachmentCount; i++)
 		{
diff --git a/src/Vulkan/VkFramebuffer.cpp b/src/Vulkan/VkFramebuffer.cpp
index ac06f88..2e862f5 100644
--- a/src/Vulkan/VkFramebuffer.cpp
+++ b/src/Vulkan/VkFramebuffer.cpp
@@ -174,7 +174,7 @@
 
 void Framebuffer::resolve(const RenderPass *renderPass, uint32_t subpassIndex)
 {
-	auto const &subpass = renderPass->getSubpass(subpassIndex);
+	const auto &subpass = renderPass->getSubpass(subpassIndex);
 	uint32_t viewMask = renderPass->getViewMask(subpassIndex);
 
 	if(subpass.pResolveAttachments)
diff --git a/src/Vulkan/VkRenderPass.cpp b/src/Vulkan/VkRenderPass.cpp
index b666f72..077efb0 100644
--- a/src/Vulkan/VkRenderPass.cpp
+++ b/src/Vulkan/VkRenderPass.cpp
@@ -149,7 +149,7 @@
 	// Handle the extensions in each subpass
 	for(uint32_t i = 0; i < subpassCount; i++)
 	{
-		auto const &subpass = pCreateInfo->pSubpasses[i];
+		const auto &subpass = pCreateInfo->pSubpasses[i];
 		const auto *extension = reinterpret_cast<const VkBaseInStructure *>(subpass.pNext);
 		while(extension)
 		{
@@ -247,7 +247,7 @@
 			{
 				// Renderpass uses multiview if this structure is present AND some subpass specifies
 				// a nonzero view mask
-				auto const *multiviewCreateInfo = reinterpret_cast<VkRenderPassMultiviewCreateInfo const *>(extensionCreateInfo);
+				const auto *multiviewCreateInfo = reinterpret_cast<VkRenderPassMultiviewCreateInfo const *>(extensionCreateInfo);
 				for(auto i = 0u; i < pCreateInfo->subpassCount; i++)
 				{
 					masks[i] = multiviewCreateInfo->pViewMasks[i];
@@ -386,7 +386,7 @@
 	bool usesDSR = false;
 	for(uint32_t i = 0; i < pCreateInfo->subpassCount; i++)
 	{
-		auto const &subpass = pCreateInfo->pSubpasses[i];
+		const auto &subpass = pCreateInfo->pSubpasses[i];
 		const VkBaseInStructure *extension = reinterpret_cast<const VkBaseInStructure *>(subpass.pNext);
 		while(extension)
 		{
