blob: 6233f5ea9c4654f51c271f70124555008ad4ff91 [file] [log] [blame]
// 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 DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_POINTER_COMPATIBILITY_H_
#define DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_POINTER_COMPATIBILITY_H_
#include "clang/AST/Type.h"
namespace clang {
namespace tidy {
namespace lifetimes {
// Returns whether a pointer with the given `pointee_type` may point to an
// object of type `object_type`.
// In the case where `object_type` is a class type, we also return true if
// `pointee_type` may point to a type derived from `object_type`. This accounts
// for the fact that `Object::Type()` may be a base class of the dynamic type
// of the object instead of being identical to the dynamic type.
// As described in TransferLifetimesForCall(), this is similar to but more
// permissive than C++'s strict aliasing rules.
bool PointeesCompatible(clang::QualType pointee_type,
clang::QualType object_type,
clang::ASTContext& ast_context);
// Returns whether a pointer of the given type may point to an object of type
// `object_type`.
bool MayPointTo(clang::QualType pointer_type, clang::QualType object_type,
clang::ASTContext& ast_context);
} // namespace lifetimes
} // namespace tidy
} // namespace clang
#endif // DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_POINTER_COMPATIBILITY_H_