blob: b31ab7eb9da2cb4796127d6f5c64296f78612807 [file]
// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_STRUCT_INHERITANCE_UPCAST_H_
#define THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_STRUCT_INHERITANCE_UPCAST_H_
#include <stddef.h>
#pragma clang lifetime_elision
class Base0 {};
class Base1 {
int base1_field_ = 1; // NOLINT(clang-diagnostic-unused-private-field)
};
class Base2 {
char base2_field_ = 2; // NOLINT(clang-diagnostic-unused-private-field)
};
class Base3 {
char base3_field_ = 3; // NOLINT(clang-diagnostic-unused-private-field)
};
class Base4 : public Base2, public Base3 {
char base4_field_ = 4; // NOLINT(clang-diagnostic-unused-private-field)
};
struct Derived final : Base0, Base1, Base4 {
char derived_field = 5;
size_t base0_address() const {
const Base0* base = this;
return reinterpret_cast<size_t>(base);
}
size_t base1_address() const {
const Base1* base = this;
return reinterpret_cast<size_t>(base);
}
size_t base2_address() const {
const Base2* base = this;
return reinterpret_cast<size_t>(base);
}
size_t base3_address() const {
const Base3* base = this;
return reinterpret_cast<size_t>(base);
}
size_t base4_address() const {
const Base4* base = this;
return reinterpret_cast<size_t>(base);
}
private:
char private_field; // NOLINT(clang-diagnostic-unused-private-field)
};
#endif // THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_STRUCT_INHERITANCE_UPCAST_H_