| Index: mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl
|
| index f151a4e245cbb72298def31c840e05b6d9e05e44..af5ea9f8a8340512fdcd0784905ebf30b7077573 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl
|
| @@ -7,15 +7,27 @@ bool {{class_name}}::Validate(
|
| const void* data,
|
| mojo::internal::ValidationContext* validation_context,
|
| bool inlined) {
|
| - if (!data)
|
| + if (!data) {
|
| + DCHECK(!inlined);
|
| return true;
|
| + }
|
| +
|
| + // If it is inlined, the alignment is already enforced by its enclosing
|
| + // object. We don't have to validate that.
|
| + DCHECK(!inlined || mojo::internal::IsAligned(data));
|
|
|
| - if (!ValidateUnionHeaderAndClaimMemory(data, inlined, validation_context))
|
| + if (!inlined &&
|
| + !mojo::internal::ValidateNonInlinedUnionHeaderAndClaimMemory(
|
| + data, validation_context)) {
|
| return false;
|
| + }
|
|
|
| const {{class_name}}* object = static_cast<const {{class_name}}*>(data);
|
| ALLOW_UNUSED_LOCAL(object);
|
|
|
| + if (inlined && object->is_null())
|
| + return true;
|
| +
|
| switch (object->tag) {
|
| {% for field in union.fields %}
|
| case {{enum_name}}::{{field.name|upper}}: {
|
|
|