Modified: trunk/Source/_javascript_Core/ChangeLog (293491 => 293492)
--- trunk/Source/_javascript_Core/ChangeLog 2022-04-27 01:15:17 UTC (rev 293491)
+++ trunk/Source/_javascript_Core/ChangeLog 2022-04-27 02:00:03 UTC (rev 293492)
@@ -1,3 +1,22 @@
+2022-04-26 Dmitry Bezhetskov <dbezhets...@igalia.com>
+
+ [WASM] Fix warning: cast from ‘char*’ to ‘JSC::Wasm::Type*’ increases required alignment of target type [-Wcast-align]
+ https://bugs.webkit.org/show_bug.cgi?id=239698
+
+ Reviewed by Darin Adler.
+
+ There is a warning inside TypeDefinition on some platforms so this
+ patch fixes it.
+
+ * wasm/WasmTypeDefinition.h:
+ (JSC::Wasm::FunctionSignature::FunctionSignature):
+ (JSC::Wasm::FunctionSignature::storage):
+ (JSC::Wasm::FunctionSignature::storage const):
+ (JSC::Wasm::StructType::StructType):
+ (JSC::Wasm::StructType::storage):
+ (JSC::Wasm::StructType::storage const):
+ (JSC::Wasm::TypeDefinition::payload):
+
2022-04-26 Elliott Williams <e...@apple.com>
Unreviewed, reverting "[Xcode] Compute PGO profdata paths instead of searching for them at build time"
Modified: trunk/Source/_javascript_Core/wasm/WasmTypeDefinition.h (293491 => 293492)
--- trunk/Source/_javascript_Core/wasm/WasmTypeDefinition.h 2022-04-27 01:15:17 UTC (rev 293491)
+++ trunk/Source/_javascript_Core/wasm/WasmTypeDefinition.h 2022-04-27 02:00:03 UTC (rev 293492)
@@ -47,7 +47,7 @@
class FunctionSignature {
public:
- FunctionSignature(const char* payload, FunctionArgCount argumentCount, FunctionArgCount returnCount)
+ FunctionSignature(Type* payload, FunctionArgCount argumentCount, FunctionArgCount returnCount)
: m_payload(payload)
, m_argCount(argumentCount)
, m_retCount(returnCount)
@@ -75,13 +75,13 @@
Type& getReturnType(FunctionArgCount i) { ASSERT(i < returnCount()); return *storage(i); }
Type& getArgumentType(FunctionArgCount i) { ASSERT(i < argumentCount()); return *storage(returnCount() + i); }
- Type* storage(FunctionArgCount i) { return i + reinterpret_cast<Type*>(const_cast<char*>(m_payload)); }
- Type* storage(FunctionArgCount i) const { return const_cast<FunctionSignature*>(this)->storage(i); }
+ Type* storage(FunctionArgCount i) { return i + m_payload; }
+ const Type* storage(FunctionArgCount i) const { return const_cast<FunctionSignature*>(this)->storage(i); }
private:
friend class TypeInformation;
- const char* m_payload;
+ Type* m_payload;
FunctionArgCount m_argCount;
FunctionArgCount m_retCount;
};
@@ -102,7 +102,7 @@
class StructType {
public:
- StructType(const char* payload, StructFieldCount fieldCount)
+ StructType(StructField* payload, StructFieldCount fieldCount)
: m_payload(payload)
, m_fieldCount(fieldCount)
{
@@ -115,11 +115,11 @@
void dump(WTF::PrintStream& out) const;
StructField& getField(StructFieldCount i) { ASSERT(i < fieldCount()); return *storage(i); }
- StructField* storage(StructFieldCount i) { return i + reinterpret_cast<StructField*>(const_cast<char*>(m_payload)); }
- StructField* storage(StructFieldCount i) const { return const_cast<StructType*>(this)->storage(i); }
+ StructField* storage(StructFieldCount i) { return i + m_payload; }
+ const StructField* storage(StructFieldCount i) const { return const_cast<StructType*>(this)->storage(i); }
private:
- const char* m_payload;
+ StructField* m_payload;
StructFieldCount m_fieldCount;
};
@@ -130,16 +130,18 @@
TypeDefinition(const TypeDefinition&) = delete;
TypeDefinition(FunctionArgCount retCount, FunctionArgCount argCount)
- : m_typeHeader { FunctionSignature { payload(), argCount, retCount } }
+ : m_typeHeader { FunctionSignature { static_cast<Type*>(payload()), argCount, retCount } }
{
}
TypeDefinition(StructFieldCount fieldCount)
- : m_typeHeader { StructType { payload(), fieldCount } }
+ : m_typeHeader { StructType { static_cast<StructField*>(payload()), fieldCount } }
{
}
- char* payload() { return reinterpret_cast<char*>(this) + sizeof(TypeDefinition); }
+ // Payload starts past end of this object.
+ void* payload() { return this + 1; }
+
static size_t allocatedFunctionSize(Checked<FunctionArgCount> retCount, Checked<FunctionArgCount> argCount) { return sizeof(TypeDefinition) + (retCount + argCount) * sizeof(Type); }
static size_t allocatedStructSize(Checked<StructFieldCount> fieldCount) { return sizeof(TypeDefinition) + fieldCount * sizeof(StructField); }