Sema::getOwningModule - take const Decl* type.

Fixes static analyzer warning that const_cast was being used despite only const methods being called.
This commit is contained in:
Simon Pilgrim 2020-01-13 14:28:49 +00:00
parent 0b91e78a71
commit 7af67259cd
2 changed files with 6 additions and 5 deletions

View File

@ -1725,7 +1725,9 @@ private:
public: public:
/// Get the module owning an entity. /// Get the module owning an entity.
Module *getOwningModule(Decl *Entity) { return Entity->getOwningModule(); } Module *getOwningModule(const Decl *Entity) {
return Entity->getOwningModule();
}
/// Make a merged definition of an existing hidden definition \p ND /// Make a merged definition of an existing hidden definition \p ND
/// visible at the specified location. /// visible at the specified location.

View File

@ -9673,8 +9673,7 @@ bool Sema::isEquivalentInternalLinkageDeclaration(const NamedDecl *A,
// entity in different modules. // entity in different modules.
if (!VA->getDeclContext()->getRedeclContext()->Equals( if (!VA->getDeclContext()->getRedeclContext()->Equals(
VB->getDeclContext()->getRedeclContext()) || VB->getDeclContext()->getRedeclContext()) ||
getOwningModule(const_cast<ValueDecl *>(VA)) == getOwningModule(VA) == getOwningModule(VB) ||
getOwningModule(const_cast<ValueDecl *>(VB)) ||
VA->isExternallyVisible() || VB->isExternallyVisible()) VA->isExternallyVisible() || VB->isExternallyVisible())
return false; return false;
@ -9711,12 +9710,12 @@ void Sema::diagnoseEquivalentInternalLinkageDeclarations(
SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) { SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {
Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D; Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D;
Module *M = getOwningModule(const_cast<NamedDecl*>(D)); Module *M = getOwningModule(D);
Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl) Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl)
<< !M << (M ? M->getFullModuleName() : ""); << !M << (M ? M->getFullModuleName() : "");
for (auto *E : Equiv) { for (auto *E : Equiv) {
Module *M = getOwningModule(const_cast<NamedDecl*>(E)); Module *M = getOwningModule(E);
Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl) Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl)
<< !M << (M ? M->getFullModuleName() : ""); << !M << (M ? M->getFullModuleName() : "");
} }