From: Mike Stump Date: Fri, 7 Aug 2009 18:05:12 +0000 (+0000) Subject: Fix some const_cast issues. This is the beginning of the rabbit hole. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e607ed068334bacb8d7b093996b4671c6ca79e25;p=clang Fix some const_cast issues. This is the beginning of the rabbit hole. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78393 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index 0822d2ae30..2cc9bd40ec 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -444,7 +444,7 @@ public: /// getTagDeclType - Return the unique reference to the type for the /// specified TagDecl (struct/union/class/enum) decl. - QualType getTagDeclType(TagDecl *Decl); + QualType getTagDeclType(const TagDecl *Decl); /// getSizeType - Return the unique type for "size_t" (C99 7.17), defined /// in . The sizeof operator requires this (C99 6.5.3.4p4). diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 404593452c..d31f1fb16e 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -2029,9 +2029,11 @@ QualType ASTContext::getDecltypeType(Expr *e) { /// getTagDeclType - Return the unique reference to the type for the /// specified TagDecl (struct/union/class/enum) decl. -QualType ASTContext::getTagDeclType(TagDecl *Decl) { +QualType ASTContext::getTagDeclType(const TagDecl *Decl) { assert (Decl); - return getTypeDeclType(Decl); + // FIXME: What is the design on getTagDeclType when it requires casting + // away const? mutable? + return getTypeDeclType(const_cast(Decl)); } /// getSizeType - Return the unique type for "size_t" (C99 7.17), the result diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 52619e9920..e07eae7b20 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -379,9 +379,7 @@ QualType CXXMethodDecl::getThisType(ASTContext &C) const { if (ClassTemplateDecl *TD = getParent()->getDescribedClassTemplate()) ClassTy = TD->getInjectedClassNameType(C); else - // FIXME: What is the design on getTagDeclType when it requires casting - // away const? mutable? - ClassTy = C.getTagDeclType(const_cast(getParent())); + ClassTy = C.getTagDeclType(getParent()); ClassTy = ClassTy.getWithAdditionalQualifiers(getTypeQualifiers()); return C.getPointerType(ClassTy); } @@ -466,10 +464,9 @@ CXXConstructorDecl::isCopyConstructor(ASTContext &Context, return false; // Is it a reference to our class type? - QualType PointeeType + QualType PointeeType = Context.getCanonicalType(ParamRefType->getPointeeType()); - QualType ClassTy - = Context.getTagDeclType(const_cast(getParent())); + QualType ClassTy = Context.getTagDeclType(getParent()); if (PointeeType.getUnqualifiedType() != ClassTy) return false; diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index f1a5e1cca4..00993be161 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -506,9 +506,7 @@ llvm::Constant *CodeGenFunction::GenerateRtti(const CXXRecordDecl *RD) { llvm::SmallString<256> OutName; llvm::raw_svector_ostream Out(OutName); QualType ClassTy; - // FIXME: What is the design on getTagDeclType when it requires casting - // away const? mutable? - ClassTy = getContext().getTagDeclType(const_cast(RD)); + ClassTy = getContext().getTagDeclType(RD); mangleCXXRtti(ClassTy, getContext(), Out); const char *Name = OutName.c_str(); llvm::GlobalVariable::LinkageTypes linktype; @@ -599,9 +597,7 @@ llvm::Value *CodeGenFunction::GenerateVtable(const CXXRecordDecl *RD) { llvm::SmallString<256> OutName; llvm::raw_svector_ostream Out(OutName); QualType ClassTy; - // FIXME: What is the design on getTagDeclType when it requires casting - // away const? mutable? - ClassTy = getContext().getTagDeclType(const_cast(RD)); + ClassTy = getContext().getTagDeclType(RD); mangleCXXVtable(ClassTy, getContext(), Out); const char *Name = OutName.c_str(); llvm::GlobalVariable::LinkageTypes linktype; diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index 0cb0c72f2e..7b1b85c64c 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -121,8 +121,7 @@ static const TagType *VerifyFuncTypeComplete(const Type* T) { /// UpdateCompletedType - When we find the full definition for a TagDecl, /// replace the 'opaque' type we previously made for it if applicable. void CodeGenTypes::UpdateCompletedType(const TagDecl *TD) { - const Type *Key = - Context.getTagDeclType(const_cast(TD)).getTypePtr(); + const Type *Key = Context.getTagDeclType(TD).getTypePtr(); llvm::DenseMap::iterator TDTI = TagDeclTypes.find(Key); if (TDTI == TagDeclTypes.end()) return; @@ -395,7 +394,7 @@ const llvm::Type *CodeGenTypes::ConvertTagDeclType(const TagDecl *TD) { // TagDecl's are not necessarily unique, instead use the (clang) // type connected to the decl. const Type *Key = - Context.getTagDeclType(const_cast(TD)).getTypePtr(); + Context.getTagDeclType(TD).getTypePtr(); llvm::DenseMap::iterator TDTI = TagDeclTypes.find(Key); @@ -478,7 +477,7 @@ void CodeGenTypes::addBitFieldInfo(const FieldDecl *FD, unsigned FieldNo, const CGRecordLayout * CodeGenTypes::getCGRecordLayout(const TagDecl *TD) const { const Type *Key = - Context.getTagDeclType(const_cast(TD)).getTypePtr(); + Context.getTagDeclType(TD).getTypePtr(); llvm::DenseMap::iterator I = CGRecordLayouts.find(Key); assert (I != CGRecordLayouts.end()