Commit 3486ec96 by Jamie Madill Committed by Commit Bot

Enable -Wweak-template-vtables.

Needs one suppression due to Clang warning about multiple vtables in a cpp file. Bug: skia:7647 Change-Id: If7f318b7539d23f783b0ef6d6478ce24a0b72bc7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2404746 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
parent ae09e889
...@@ -161,6 +161,7 @@ config("extra_warnings") { ...@@ -161,6 +161,7 @@ config("extra_warnings") {
"-Wtautological-type-limit-compare", "-Wtautological-type-limit-compare",
"-Wundefined-reinterpret-cast", "-Wundefined-reinterpret-cast",
"-Wunneeded-internal-declaration", "-Wunneeded-internal-declaration",
"-Wweak-template-vtables",
# The below warnings are used by WebKit. We enable them to make rolling # The below warnings are used by WebKit. We enable them to make rolling
# ANGLE in WebKit easier. # ANGLE in WebKit easier.
......
...@@ -398,4 +398,14 @@ std::ostream &FmtHex(std::ostream &os, T value) ...@@ -398,4 +398,14 @@ std::ostream &FmtHex(std::ostream &os, T value)
# define ANGLE_REENABLE_DESTRUCTOR_OVERRIDE_WARNING # define ANGLE_REENABLE_DESTRUCTOR_OVERRIDE_WARNING
#endif #endif
#if defined(__clang__)
# define ANGLE_DISABLE_WEAK_TEMPLATE_VTABLES_WARNING \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wweak-template-vtables\"")
# define ANGLE_REENABLE_WEAK_TEMPLATE_VTABLES_WARNING _Pragma("clang diagnostic pop")
#else
# define ANGLE_DISABLE_WEAK_TEMPLATE_VTABLES_WARNING
# define ANGLE_REENABLE_WEAK_TEMPLATE_VTABLES_WARNING
#endif
#endif // COMMON_DEBUG_H_ #endif // COMMON_DEBUG_H_
...@@ -97,6 +97,8 @@ void TypedResourceManager<ResourceType, ImplT, IDType>::deleteObject(const Conte ...@@ -97,6 +97,8 @@ void TypedResourceManager<ResourceType, ImplT, IDType>::deleteObject(const Conte
} }
} }
// Unclear why Clang warns about weak vtables in this case.
ANGLE_DISABLE_WEAK_TEMPLATE_VTABLES_WARNING
template class TypedResourceManager<Buffer, BufferManager, BufferID>; template class TypedResourceManager<Buffer, BufferManager, BufferID>;
template class TypedResourceManager<Texture, TextureManager, TextureID>; template class TypedResourceManager<Texture, TextureManager, TextureID>;
template class TypedResourceManager<Renderbuffer, RenderbufferManager, RenderbufferID>; template class TypedResourceManager<Renderbuffer, RenderbufferManager, RenderbufferID>;
...@@ -104,8 +106,10 @@ template class TypedResourceManager<Sampler, SamplerManager, SamplerID>; ...@@ -104,8 +106,10 @@ template class TypedResourceManager<Sampler, SamplerManager, SamplerID>;
template class TypedResourceManager<Sync, SyncManager, GLuint>; template class TypedResourceManager<Sync, SyncManager, GLuint>;
template class TypedResourceManager<Framebuffer, FramebufferManager, FramebufferID>; template class TypedResourceManager<Framebuffer, FramebufferManager, FramebufferID>;
template class TypedResourceManager<ProgramPipeline, ProgramPipelineManager, ProgramPipelineID>; template class TypedResourceManager<ProgramPipeline, ProgramPipelineManager, ProgramPipelineID>;
ANGLE_REENABLE_WEAK_TEMPLATE_VTABLES_WARNING
// BufferManager Implementation. // BufferManager Implementation.
BufferManager::~BufferManager() = default;
// static // static
Buffer *BufferManager::AllocateNewObject(rx::GLImplFactory *factory, BufferID handle) Buffer *BufferManager::AllocateNewObject(rx::GLImplFactory *factory, BufferID handle)
...@@ -212,6 +216,8 @@ void ShaderProgramManager::deleteObject(const Context *context, ...@@ -212,6 +216,8 @@ void ShaderProgramManager::deleteObject(const Context *context,
// TextureManager Implementation. // TextureManager Implementation.
TextureManager::~TextureManager() = default;
// static // static
Texture *TextureManager::AllocateNewObject(rx::GLImplFactory *factory, Texture *TextureManager::AllocateNewObject(rx::GLImplFactory *factory,
TextureID handle, TextureID handle,
...@@ -253,6 +259,8 @@ void TextureManager::enableHandleAllocatorLogging() ...@@ -253,6 +259,8 @@ void TextureManager::enableHandleAllocatorLogging()
// RenderbufferManager Implementation. // RenderbufferManager Implementation.
RenderbufferManager::~RenderbufferManager() = default;
// static // static
Renderbuffer *RenderbufferManager::AllocateNewObject(rx::GLImplFactory *factory, Renderbuffer *RenderbufferManager::AllocateNewObject(rx::GLImplFactory *factory,
RenderbufferID handle) RenderbufferID handle)
...@@ -280,6 +288,8 @@ Renderbuffer *RenderbufferManager::getRenderbuffer(RenderbufferID handle) const ...@@ -280,6 +288,8 @@ Renderbuffer *RenderbufferManager::getRenderbuffer(RenderbufferID handle) const
// SamplerManager Implementation. // SamplerManager Implementation.
SamplerManager::~SamplerManager() = default;
// static // static
Sampler *SamplerManager::AllocateNewObject(rx::GLImplFactory *factory, SamplerID handle) Sampler *SamplerManager::AllocateNewObject(rx::GLImplFactory *factory, SamplerID handle)
{ {
...@@ -311,6 +321,8 @@ bool SamplerManager::isSampler(SamplerID sampler) const ...@@ -311,6 +321,8 @@ bool SamplerManager::isSampler(SamplerID sampler) const
// SyncManager Implementation. // SyncManager Implementation.
SyncManager::~SyncManager() = default;
// static // static
void SyncManager::DeleteObject(const Context *context, Sync *sync) void SyncManager::DeleteObject(const Context *context, Sync *sync)
{ {
...@@ -333,6 +345,8 @@ Sync *SyncManager::getSync(GLuint handle) const ...@@ -333,6 +345,8 @@ Sync *SyncManager::getSync(GLuint handle) const
// FramebufferManager Implementation. // FramebufferManager Implementation.
FramebufferManager::~FramebufferManager() = default;
// static // static
Framebuffer *FramebufferManager::AllocateNewObject(rx::GLImplFactory *factory, Framebuffer *FramebufferManager::AllocateNewObject(rx::GLImplFactory *factory,
FramebufferID handle, FramebufferID handle,
...@@ -380,6 +394,8 @@ void FramebufferManager::invalidateFramebufferCompletenessCache() const ...@@ -380,6 +394,8 @@ void FramebufferManager::invalidateFramebufferCompletenessCache() const
// ProgramPipelineManager Implementation. // ProgramPipelineManager Implementation.
ProgramPipelineManager::~ProgramPipelineManager() = default;
// static // static
ProgramPipeline *ProgramPipelineManager::AllocateNewObject(rx::GLImplFactory *factory, ProgramPipeline *ProgramPipelineManager::AllocateNewObject(rx::GLImplFactory *factory,
ProgramPipelineID handle) ProgramPipelineID handle)
......
...@@ -142,7 +142,7 @@ class BufferManager : public TypedResourceManager<Buffer, BufferManager, BufferI ...@@ -142,7 +142,7 @@ class BufferManager : public TypedResourceManager<Buffer, BufferManager, BufferI
static void DeleteObject(const Context *context, Buffer *buffer); static void DeleteObject(const Context *context, Buffer *buffer);
protected: protected:
~BufferManager() override {} ~BufferManager() override;
}; };
class ShaderProgramManager : public ResourceManagerBase class ShaderProgramManager : public ResourceManagerBase
...@@ -210,7 +210,7 @@ class TextureManager : public TypedResourceManager<Texture, TextureManager, Text ...@@ -210,7 +210,7 @@ class TextureManager : public TypedResourceManager<Texture, TextureManager, Text
void enableHandleAllocatorLogging(); void enableHandleAllocatorLogging();
protected: protected:
~TextureManager() override {} ~TextureManager() override;
}; };
class RenderbufferManager class RenderbufferManager
...@@ -229,7 +229,7 @@ class RenderbufferManager ...@@ -229,7 +229,7 @@ class RenderbufferManager
static void DeleteObject(const Context *context, Renderbuffer *renderbuffer); static void DeleteObject(const Context *context, Renderbuffer *renderbuffer);
protected: protected:
~RenderbufferManager() override {} ~RenderbufferManager() override;
}; };
class SamplerManager : public TypedResourceManager<Sampler, SamplerManager, SamplerID> class SamplerManager : public TypedResourceManager<Sampler, SamplerManager, SamplerID>
...@@ -248,7 +248,7 @@ class SamplerManager : public TypedResourceManager<Sampler, SamplerManager, Samp ...@@ -248,7 +248,7 @@ class SamplerManager : public TypedResourceManager<Sampler, SamplerManager, Samp
static void DeleteObject(const Context *context, Sampler *sampler); static void DeleteObject(const Context *context, Sampler *sampler);
protected: protected:
~SamplerManager() override {} ~SamplerManager() override;
}; };
class SyncManager : public TypedResourceManager<Sync, SyncManager, GLuint> class SyncManager : public TypedResourceManager<Sync, SyncManager, GLuint>
...@@ -260,7 +260,7 @@ class SyncManager : public TypedResourceManager<Sync, SyncManager, GLuint> ...@@ -260,7 +260,7 @@ class SyncManager : public TypedResourceManager<Sync, SyncManager, GLuint>
static void DeleteObject(const Context *context, Sync *sync); static void DeleteObject(const Context *context, Sync *sync);
protected: protected:
~SyncManager() override {} ~SyncManager() override;
}; };
class FramebufferManager class FramebufferManager
...@@ -288,7 +288,7 @@ class FramebufferManager ...@@ -288,7 +288,7 @@ class FramebufferManager
static void DeleteObject(const Context *context, Framebuffer *framebuffer); static void DeleteObject(const Context *context, Framebuffer *framebuffer);
protected: protected:
~FramebufferManager() override {} ~FramebufferManager() override;
}; };
class ProgramPipelineManager class ProgramPipelineManager
...@@ -308,7 +308,7 @@ class ProgramPipelineManager ...@@ -308,7 +308,7 @@ class ProgramPipelineManager
static void DeleteObject(const Context *context, ProgramPipeline *pipeline); static void DeleteObject(const Context *context, ProgramPipeline *pipeline);
protected: protected:
~ProgramPipelineManager() override {} ~ProgramPipelineManager() override;
}; };
class MemoryObjectManager : public ResourceManagerBase class MemoryObjectManager : public ResourceManagerBase
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment