diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-13 21:11:42 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-13 21:11:42 +0000 |
commit | d8f9cb03ad5ba30094995c254e2b7afcef34d813 (patch) | |
tree | d89b2738ce41211358505efea4c67d8d7f2e34c9 /lib/Sema/SemaInherit.cpp | |
parent | 5dc53c9c2328b5bea5422005b04960c18afd83ad (diff) |
Add a new, more advanced CheckDerivedToBaseConversion that takes custom diagnostic IDs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71720 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaInherit.cpp')
-rw-r--r-- | lib/Sema/SemaInherit.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/lib/Sema/SemaInherit.cpp b/lib/Sema/SemaInherit.cpp index 8239f54d68..1f3433e166 100644 --- a/lib/Sema/SemaInherit.cpp +++ b/lib/Sema/SemaInherit.cpp @@ -236,9 +236,12 @@ bool Sema::LookupInBases(CXXRecordDecl *Class, /// otherwise. Loc is the location where this routine should point to /// if there is an error, and Range is the source range to highlight /// if there is an error. -bool +bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, - SourceLocation Loc, SourceRange Range) { + unsigned InaccessibleBaseID, + unsigned AmbigiousBaseConvID, + SourceLocation Loc, SourceRange Range, + DeclarationName Name) { // First, determine whether the path from Derived to Base is // ambiguous. This is slightly more expensive than checking whether // the Derived to Base conversion exists, because here we need to @@ -252,7 +255,8 @@ Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, if (!Paths.isAmbiguous(Context.getCanonicalType(Base).getUnqualifiedType())) { // Check that the base class can be accessed. - return CheckBaseClassAccess(Derived, Base, Paths, Loc); + return CheckBaseClassAccess(Derived, Base, InaccessibleBaseID, Paths, Loc, + Name); } // We know that the derived-to-base conversion is ambiguous, and @@ -273,11 +277,21 @@ Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, // to each base class subobject. std::string PathDisplayStr = getAmbiguousPathsDisplayString(Paths); - Diag(Loc, diag::err_ambiguous_derived_to_base_conv) - << Derived << Base << PathDisplayStr << Range; + Diag(Loc, AmbigiousBaseConvID) + << Derived << Base << PathDisplayStr << Range << Name; return true; } +bool +Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, + SourceLocation Loc, SourceRange Range) { + return CheckDerivedToBaseConversion(Derived, Base, + diag::err_conv_to_inaccessible_base, + diag::err_ambiguous_derived_to_base_conv, + Loc, Range, DeclarationName()); +} + + /// @brief Builds a string representing ambiguous paths from a /// specific derived class to different subobjects of the same base /// class. |