[clang] Improve LLVM-style RTTI support in ExternalASTSource/ExternalSemaSource
authorRaphael Isemann <teemperor@gmail.com>
Sun, 15 Dec 2019 15:09:20 +0000 (16:09 +0100)
committerRaphael Isemann <risemann@apple.com>
Sun, 15 Dec 2019 17:11:01 +0000 (18:11 +0100)
commitaa4558497ff6301881adf38960dd2f4d95aa8fc5
tree29b444fb2a5b3d00c022bff968a7c0ff2cb52cc7
parentfd7dca98373cee7d379644d6d6e5c163d15107b7
[clang] Improve LLVM-style RTTI support in ExternalASTSource/ExternalSemaSource

Summary:
We currently have some very basic LLVM-style RTTI support in the ExternalASTSource class hierarchy
based on the `SemaSource` bool( to discriminate it form the ExternalSemaSource). As ExternalASTSource
is supposed to be subclassed we should have extendable LLVM-style RTTI in this class hierarchy to make life easier
for projects building on top of Clang.

Most notably the current RTTI implementation forces LLDB to implement RTTI for its
own ExternalASTSource class (ClangExternalASTSourceCommon) by keeping a global set of
ExternalASTSources that are known to be ClangExternalASTSourceCommon. Projects
using Clang currently have to dosimilar workarounds to get RTTI support for their subclasses.

This patch turns this into full-fledged LLVM-style RTTI based on a static `ID` variable similar to
other LLVM class hierarchies. Also removes the friend declaration from ExternalASTSource to
its child class that was only used to grant access to the `SemaSource` member.

Reviewers: aprantl, dblaikie, rjmccall

Reviewed By: aprantl

Subscribers: riccibruno, labath, lhames, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D71397
clang/include/clang/AST/ExternalASTSource.h
clang/include/clang/Sema/ExternalSemaSource.h
clang/include/clang/Sema/MultiplexExternalSemaSource.h
clang/lib/AST/ExternalASTSource.cpp
clang/lib/Sema/MultiplexExternalSemaSource.cpp
clang/lib/Sema/Sema.cpp