clang 8.0.0

Classes | Public Types | Public Member Functions | Friends | List of all members
clang::CXXBasePaths Class Reference

BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases. More...

`#include "clang/AST/CXXInheritance.h"`

## Public Types
using | paths_iterator = std::list< CXXBasePath >::iterator
using | const_paths_iterator = std::list< CXXBasePath >::const_iterator
using | decl_iterator = NamedDecl **
using | decl_range = llvm::iterator_range< decl_iterator >

## Public Member Functions
| CXXBasePaths (bool FindAmbiguities=true, bool RecordPaths=true, bool DetectVirtual=true)
| BasePaths - Construct a new BasePaths structure to record the paths for a derived-to-base search. More...
paths_iterator | begin ()
paths_iterator | end ()
const_paths_iterator | begin () const
const_paths_iterator | end () const
CXXBasePath & | front ()
const CXXBasePath & | front () const
decl_range | found_decls ()
bool | isAmbiguous (CanQualType BaseType)
| Determine whether the path from the most-derived type to the given base type is ambiguous (i.e., it refers to multiple subobjects of the same base type). More...
bool | isFindingAmbiguities () const
| Whether we are finding multiple paths to detect ambiguities. More...
bool | isRecordingPaths () const
| Whether we are recording paths. More...
void | setRecordingPaths (bool RP)
| Specify whether we should be recording paths or not. More...
bool | isDetectingVirtual () const
| Whether we are detecting virtual bases. More...
const RecordType * | getDetectedVirtual () const
| The virtual base discovered on the path (if we are merely detecting virtuals). More...
CXXRecordDecl * | getOrigin () const
| Retrieve the type from which this base-paths search began. More...
void | setOrigin (CXXRecordDecl *Rec)
void | clear ()
| Clear the base-paths results. More...
void | swap (CXXBasePaths &Other)
| Swap this data structure's contents with another CXXBasePaths object. More...

## Friends
class | CXXRecordDecl

## Detailed Description

BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases.

For example, given the following class hierarchy:

class A { };
class B : public A { };
class C : public A { };
class D : public B, public C{ };

There are two potential BasePaths to represent paths from D to a base subobject of type A. One path is (D,0) -> (B,0) -> (A,0) and another is (D,0)->(C,0)->(A,1). These two paths actually refer to two different base class subobjects of the same type, so the BasePaths object refers to an ambiguous path. On the other hand, consider the following class hierarchy:

class A { };
class B : public virtual A { };
class C : public virtual A { };
class D : public B, public C{ };

Here, there are two potential BasePaths again, (D, 0) -> (B, 0) -> (A,v) and (D, 0) -> (C, 0) -> (A, v), but since both of them refer to the same base class subobject of type A (the virtual one), there is no ambiguity.

Definition at line 119 of file CXXInheritance.h.

## Member Typedef Documentation

## ◆ const_paths_iterator

using clang::CXXBasePaths::const_paths_iterator = std::list<CXXBasePath>::const_iterator

Definition at line 182 of file CXXInheritance.h.

## ◆ decl_iterator

using clang::CXXBasePaths::decl_iterator = NamedDecl **

Definition at line 183 of file CXXInheritance.h.

## ◆ decl_range

using clang::CXXBasePaths::decl_range = llvm::iterator_range<decl_iterator>

Definition at line 200 of file CXXInheritance.h.

## ◆ paths_iterator

using clang::CXXBasePaths::paths_iterator = std::list<CXXBasePath>::iterator

Definition at line 181 of file CXXInheritance.h.

## Constructor & Destructor Documentation

## ◆ CXXBasePaths()

clang::CXXBasePaths::CXXBasePaths | ( | bool | FindAmbiguities = `true`,
|  | bool | RecordPaths = `true`,
|  | bool | DetectVirtual = `true`
| ) |  |
| inline explicit

BasePaths - Construct a new BasePaths structure to record the paths for a derived-to-base search.

Definition at line 187 of file CXXInheritance.h.

## Member Function Documentation

## ◆ begin() [1/2]

paths_iterator clang::CXXBasePaths::begin | ( |  | ) |
| inline

Definition at line 192 of file CXXInheritance.h.

Referenced by DiagnoseReinterpretUpDownCast(), and clang::OverridingMethods::replaceAll().

## ◆ begin() [2/2]

const_paths_iterator clang::CXXBasePaths::begin | ( |  | ) | const
| inline

Definition at line 194 of file CXXInheritance.h.

## ◆ clear()

void CXXBasePaths::clear | ( |  | ) |

Clear the base-paths results.

clear - Clear out all prior path information.

Definition at line 71 of file CXXInheritance.cpp.

References clang::CXXBasePath::clear().

## ◆ end() [1/2]

paths_iterator clang::CXXBasePaths::end | ( |  | ) |
| inline

Definition at line 193 of file CXXInheritance.h.

Referenced by DiagnoseReinterpretUpDownCast(), and clang::OverridingMethods::replaceAll().

## ◆ end() [2/2]

const_paths_iterator clang::CXXBasePaths::end | ( |  | ) | const
| inline

Definition at line 195 of file CXXInheritance.h.

## ◆ found_decls()

CXXBasePaths::decl_range CXXBasePaths::found_decls | ( |  | ) |

Definition at line 52 of file CXXInheritance.cpp.

## ◆ front() [1/2]

CXXBasePath& clang::CXXBasePaths::front | ( |  | ) |
| inline

Definition at line 197 of file CXXInheritance.h.

## ◆ front() [2/2]

const CXXBasePath& clang::CXXBasePaths::front | ( |  | ) | const
| inline

Definition at line 198 of file CXXInheritance.h.

## ◆ getDetectedVirtual()

const RecordType* clang::CXXBasePaths::getDetectedVirtual | ( |  | ) | const
| inline

The virtual base discovered on the path (if we are merely detecting virtuals).

Definition at line 223 of file CXXInheritance.h.

## ◆ getOrigin()

CXXRecordDecl* clang::CXXBasePaths::getOrigin | ( |  | ) | const
| inline

Retrieve the type from which this base-paths search began.

Definition at line 229 of file CXXInheritance.h.

## ◆ isAmbiguous()

bool CXXBasePaths::isAmbiguous | ( | CanQualType | BaseType | ) |

Determine whether the path from the most-derived type to the given base type is ambiguous (i.e., it refers to multiple subobjects of the same base type).

isAmbiguous - Determines whether the set of paths provided is ambiguous, i.e., there are two or more paths that refer to different base class subobjects of the same type.

BaseType must be an unqualified, canonical class type.

Definition at line 64 of file CXXInheritance.cpp.

References clang::CanQual< T >::getUnqualifiedType().

## ◆ isDetectingVirtual()

bool clang::CXXBasePaths::isDetectingVirtual | ( |  | ) | const
| inline

Whether we are detecting virtual bases.

Definition at line 219 of file CXXInheritance.h.

## ◆ isFindingAmbiguities()

bool clang::CXXBasePaths::isFindingAmbiguities | ( |  | ) | const
| inline

Whether we are finding multiple paths to detect ambiguities.

Definition at line 210 of file CXXInheritance.h.

Referenced by clang::CXXRecordDecl::lookupInBases().

## ◆ isRecordingPaths()

bool clang::CXXBasePaths::isRecordingPaths | ( |  | ) | const
| inline

Whether we are recording paths.

Definition at line 213 of file CXXInheritance.h.

Referenced by clang::CXXRecordDecl::lookupInBases().

## ◆ setOrigin()

void clang::CXXBasePaths::setOrigin | ( | CXXRecordDecl * | Rec | ) |
| inline

Definition at line 230 of file CXXInheritance.h.

References clang::CodeGen::clear().

Referenced by clang::CXXRecordDecl::isDerivedFrom(), and clang::CXXRecordDecl::isVirtuallyDerivedFrom().

## ◆ setRecordingPaths()

void clang::CXXBasePaths::setRecordingPaths | ( | bool | RP | ) |
| inline

Specify whether we should be recording paths or not.

Definition at line 216 of file CXXInheritance.h.

## ◆ swap()

void CXXBasePaths::swap | ( | CXXBasePaths & | Other | ) |

Swap this data structure's contents with another CXXBasePaths object.

Swaps the contents of this CXXBasePaths structure with the contents of Other.

Definition at line 81 of file CXXInheritance.cpp.

Referenced by clang::LookupResult::setAmbiguousBaseSubobjects(), and clang::LookupResult::setAmbiguousBaseSubobjectTypes().

## Friends And Related Function Documentation

## ◆ CXXRecordDecl

friend class CXXRecordDecl
| friend

Definition at line 120 of file CXXInheritance.h.

The documentation for this class was generated from the following files:

- include/clang/AST/CXXInheritance.h
- lib/AST/CXXInheritance.cpp