ShareableElementData should use zero-length array for storage.
[WebKit-https.git] / Source / WebCore / dom / Element.h
index f1d6bfe3cb8a4d96df13c4b400b08e6f8cedfae3..df0125c9f0cbb1737b3f91205ea55d5103dfa070 100644 (file)
@@ -119,19 +119,26 @@ private:
     PassRefPtr<UniqueElementData> makeUniqueCopy() const;
 };
 
+#if COMPILER(MSVC)
+#pragma warning(push)
+#pragma warning(disable: 4200) // Disable "zero-sized array in struct/union" warning
+#endif
+
 class ShareableElementData : public ElementData {
 public:
     static PassRefPtr<ShareableElementData> createWithAttributes(const Vector<Attribute>&);
 
-    const Attribute* immutableAttributeArray() const { return reinterpret_cast<const Attribute*>(&m_attributeArray); }
-
     explicit ShareableElementData(const Vector<Attribute>&);
     explicit ShareableElementData(const UniqueElementData&);
     ~ShareableElementData();
 
-    void* m_attributeArray;
+    Attribute m_attributeArray[0];
 };
 
+#if COMPILER(MSVC)
+#pragma warning(pop)
+#endif
+
 class UniqueElementData : public ElementData {
 public:
     static PassRefPtr<UniqueElementData> create();
@@ -1034,7 +1041,7 @@ inline const Attribute* ElementData::attributeItem(unsigned index) const
     ASSERT_WITH_SECURITY_IMPLICATION(index < length());
     if (m_isUnique)
         return &static_cast<const UniqueElementData*>(this)->m_attributeVector.at(index);
-    return &static_cast<const ShareableElementData*>(this)->immutableAttributeArray()[index];
+    return &static_cast<const ShareableElementData*>(this)->m_attributeArray[index];
 }
 
 } // namespace