Do not use dynamic_cast if RTTI is disabled. (issue 7250043)

1 view
Skip to first unread message

apat...@chromium.org

unread,
Jan 30, 2013, 4:32:28 PM1/30/13
to dan...@transgaming.com, angleproj...@googlegroups.com, re...@codereview-hr.appspotmail.com
Reviewers: dgkoch,

Message:
I could also disable warning C4541 or compile ANGLE with RTTI enabled.
The latter would be inconsistent with the rest of Chrome. What do you
think?

Description:
Do not use dynamic_cast if RTTI is disabled.

Please review this at https://codereview.appspot.com/7250043/

Affected files:
M src/common/debug.h
M src/libGLESv2/renderer/Image11.cpp
M src/libGLESv2/renderer/Image9.cpp
M src/libGLESv2/renderer/IndexBuffer11.cpp
M src/libGLESv2/renderer/IndexBuffer9.cpp
M src/libGLESv2/renderer/RenderTarget11.cpp
M src/libGLESv2/renderer/RenderTarget9.cpp
M src/libGLESv2/renderer/Renderer11.cpp
M src/libGLESv2/renderer/Renderer9.cpp
M src/libGLESv2/renderer/ShaderExecutable11.cpp
M src/libGLESv2/renderer/ShaderExecutable9.cpp
M src/libGLESv2/renderer/SwapChain11.cpp
M src/libGLESv2/renderer/SwapChain9.cpp
M src/libGLESv2/renderer/TextureStorage11.cpp
M src/libGLESv2/renderer/TextureStorage9.cpp
M src/libGLESv2/renderer/VertexBuffer11.cpp
M src/libGLESv2/renderer/VertexBuffer9.cpp


Index: src/common/debug.h
===================================================================
--- src/common/debug.h (revision 1805)
+++ src/common/debug.h (working copy)
@@ -99,6 +99,13 @@
#define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n",
__FUNCTION__, __LINE__)
#endif

+// A macro that determines whether an object has a given runtime type.
+#if !defined(NDEBUG) && (!defined(_MSC_VER) || defined(_CPPRTTI))
+#define HAS_DYNAMIC_TYPE(type, obj) (dynamic_cast<type >(obj) != NULL)
+#else
+#define HAS_DYNAMIC_TYPE(type, obj) true
+#endif
+
// A macro functioning as a compile-time assert to validate constant
conditions
#define META_ASSERT(condition) typedef int
COMPILE_TIME_ASSERT_##__LINE__[static_cast<bool>(condition)?1:-1]

Index: src/libGLESv2/renderer/Image11.cpp
===================================================================
--- src/libGLESv2/renderer/Image11.cpp (revision 1805)
+++ src/libGLESv2/renderer/Image11.cpp (working copy)
@@ -37,7 +37,7 @@

Image11 *Image11::makeImage11(Image *img)
{
- ASSERT(dynamic_cast<rx::Image11*>(img) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Image11*, img));
return static_cast<rx::Image11*>(img);
}

Index: src/libGLESv2/renderer/Image9.cpp
===================================================================
--- src/libGLESv2/renderer/Image9.cpp (revision 1805)
+++ src/libGLESv2/renderer/Image9.cpp (working copy)
@@ -98,7 +98,7 @@

Image9 *Image9::makeImage9(Image *img)
{
- ASSERT(dynamic_cast<rx::Image9*>(img) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Image9*, img));
return static_cast<rx::Image9*>(img);
}

Index: src/libGLESv2/renderer/IndexBuffer11.cpp
===================================================================
--- src/libGLESv2/renderer/IndexBuffer11.cpp (revision 1805)
+++ src/libGLESv2/renderer/IndexBuffer11.cpp (working copy)
@@ -65,7 +65,7 @@

IndexBuffer11 *IndexBuffer11::makeIndexBuffer11(IndexBuffer *indexBuffer)
{
- ASSERT(dynamic_cast<IndexBuffer11*>(indexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer11*, indexBuffer));
return static_cast<IndexBuffer11*>(indexBuffer);
}

Index: src/libGLESv2/renderer/IndexBuffer9.cpp
===================================================================
--- src/libGLESv2/renderer/IndexBuffer9.cpp (revision 1805)
+++ src/libGLESv2/renderer/IndexBuffer9.cpp (working copy)
@@ -86,7 +86,7 @@

IndexBuffer9 *IndexBuffer9::makeIndexBuffer9(IndexBuffer *indexBuffer)
{
- ASSERT(dynamic_cast<IndexBuffer9*>(indexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer9*, indexBuffer));
return static_cast<IndexBuffer9*>(indexBuffer);
}

Index: src/libGLESv2/renderer/RenderTarget11.cpp
===================================================================
--- src/libGLESv2/renderer/RenderTarget11.cpp (revision 1805)
+++ src/libGLESv2/renderer/RenderTarget11.cpp (working copy)
@@ -349,7 +349,7 @@

RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
{
- ASSERT(dynamic_cast<rx::RenderTarget11*>(target) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
return static_cast<rx::RenderTarget11*>(target);
}

Index: src/libGLESv2/renderer/RenderTarget9.cpp
===================================================================
--- src/libGLESv2/renderer/RenderTarget9.cpp (revision 1805)
+++ src/libGLESv2/renderer/RenderTarget9.cpp (working copy)
@@ -94,7 +94,7 @@

RenderTarget9 *RenderTarget9::makeRenderTarget9(RenderTarget *target)
{
- ASSERT(dynamic_cast<rx::RenderTarget9*>(target) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget9*, target));
return static_cast<rx::RenderTarget9*>(target);
}

Index: src/libGLESv2/renderer/Renderer11.cpp
===================================================================
--- src/libGLESv2/renderer/Renderer11.cpp (revision 1805)
+++ src/libGLESv2/renderer/Renderer11.cpp (working copy)
@@ -142,7 +142,7 @@

Renderer11 *Renderer11::makeRenderer11(Renderer *renderer)
{
- ASSERT(dynamic_cast<rx::Renderer11*>(renderer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer11*, renderer));
return static_cast<rx::Renderer11*>(renderer);
}

Index: src/libGLESv2/renderer/Renderer9.cpp
===================================================================
--- src/libGLESv2/renderer/Renderer9.cpp (revision 1805)
+++ src/libGLESv2/renderer/Renderer9.cpp (working copy)
@@ -164,7 +164,7 @@

Renderer9 *Renderer9::makeRenderer9(Renderer *renderer)
{
- ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer9*, renderer));
return static_cast<rx::Renderer9*>(renderer);
}

Index: src/libGLESv2/renderer/ShaderExecutable11.cpp
===================================================================
--- src/libGLESv2/renderer/ShaderExecutable11.cpp (revision 1805)
+++ src/libGLESv2/renderer/ShaderExecutable11.cpp (working copy)
@@ -67,7 +67,7 @@

ShaderExecutable11
*ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
{
- ASSERT(dynamic_cast<ShaderExecutable11*>(executable) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable));
return static_cast<ShaderExecutable11*>(executable);
}

Index: src/libGLESv2/renderer/ShaderExecutable9.cpp
===================================================================
--- src/libGLESv2/renderer/ShaderExecutable9.cpp (revision 1805)
+++ src/libGLESv2/renderer/ShaderExecutable9.cpp (working copy)
@@ -42,7 +42,7 @@

ShaderExecutable9
*ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
{
- ASSERT(dynamic_cast<ShaderExecutable9*>(executable) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable9*, executable));
return static_cast<ShaderExecutable9*>(executable);
}

Index: src/libGLESv2/renderer/SwapChain11.cpp
===================================================================
--- src/libGLESv2/renderer/SwapChain11.cpp (revision 1805)
+++ src/libGLESv2/renderer/SwapChain11.cpp (working copy)
@@ -592,7 +592,7 @@

SwapChain11 *SwapChain11::makeSwapChain11(SwapChain *swapChain)
{
- ASSERT(dynamic_cast<rx::SwapChain11*>(swapChain) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain11*, swapChain));
return static_cast<rx::SwapChain11*>(swapChain);
}

Index: src/libGLESv2/renderer/SwapChain9.cpp
===================================================================
--- src/libGLESv2/renderer/SwapChain9.cpp (revision 1805)
+++ src/libGLESv2/renderer/SwapChain9.cpp (working copy)
@@ -392,7 +392,7 @@

SwapChain9 *SwapChain9::makeSwapChain9(SwapChain *swapChain)
{
- ASSERT(dynamic_cast<rx::SwapChain9*>(swapChain) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain9*, swapChain));
return static_cast<rx::SwapChain9*>(swapChain);
}

Index: src/libGLESv2/renderer/TextureStorage11.cpp
===================================================================
--- src/libGLESv2/renderer/TextureStorage11.cpp (revision 1805)
+++ src/libGLESv2/renderer/TextureStorage11.cpp (working copy)
@@ -33,7 +33,7 @@

TextureStorage11 *TextureStorage11::makeTextureStorage11(TextureStorage
*storage)
{
- ASSERT(dynamic_cast<TextureStorage11*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11*, storage));
return static_cast<TextureStorage11*>(storage);
}

@@ -275,7 +275,7 @@

TextureStorage11_2D
*TextureStorage11_2D::makeTextureStorage11_2D(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage11_2D*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_2D*, storage));
return static_cast<TextureStorage11_2D*>(storage);
}

@@ -453,7 +453,7 @@

TextureStorage11_Cube
*TextureStorage11_Cube::makeTextureStorage11_Cube(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage11_Cube*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_Cube*, storage));
return static_cast<TextureStorage11_Cube*>(storage);
}

Index: src/libGLESv2/renderer/TextureStorage9.cpp
===================================================================
--- src/libGLESv2/renderer/TextureStorage9.cpp (revision 1805)
+++ src/libGLESv2/renderer/TextureStorage9.cpp (working copy)
@@ -33,7 +33,7 @@

TextureStorage9 *TextureStorage9::makeTextureStorage9(TextureStorage
*storage)
{
- ASSERT(dynamic_cast<TextureStorage9*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9*, storage));
return static_cast<TextureStorage9*>(storage);
}

@@ -153,7 +153,7 @@

TextureStorage9_2D
*TextureStorage9_2D::makeTextureStorage9_2D(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage9_2D*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_2D*, storage));
return static_cast<TextureStorage9_2D*>(storage);
}

@@ -258,7 +258,7 @@

TextureStorage9_Cube
*TextureStorage9_Cube::makeTextureStorage9_Cube(TextureStorage *storage)
{
- ASSERT(dynamic_cast<TextureStorage9_Cube*>(storage) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_Cube*, storage));
return static_cast<TextureStorage9_Cube*>(storage);
}

Index: src/libGLESv2/renderer/VertexBuffer11.cpp
===================================================================
--- src/libGLESv2/renderer/VertexBuffer11.cpp (revision 1805)
+++ src/libGLESv2/renderer/VertexBuffer11.cpp (working copy)
@@ -65,7 +65,7 @@

VertexBuffer11 *VertexBuffer11::makeVertexBuffer11(VertexBuffer
*vetexBuffer)
{
- ASSERT(dynamic_cast<VertexBuffer11*>(vetexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer11*, vetexBuffer));
return static_cast<VertexBuffer11*>(vetexBuffer);
}

Index: src/libGLESv2/renderer/VertexBuffer9.cpp
===================================================================
--- src/libGLESv2/renderer/VertexBuffer9.cpp (revision 1805)
+++ src/libGLESv2/renderer/VertexBuffer9.cpp (working copy)
@@ -75,7 +75,7 @@

VertexBuffer9 *VertexBuffer9::makeVertexBuffer9(VertexBuffer *vertexBuffer)
{
- ASSERT(dynamic_cast<VertexBuffer9*>(vertexBuffer) != NULL);
+ ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer9*, vertexBuffer));
return static_cast<VertexBuffer9*>(vertexBuffer);
}



dan...@transgaming.com

unread,
Jan 30, 2013, 4:50:30 PM1/30/13
to apat...@chromium.org, angleproj...@googlegroups.com, re...@codereview-hr.appspotmail.com
Reply all
Reply to author
Forward
0 new messages