]> granicus.if.org Git - clang/commitdiff
Fix some const_cast issues. This is the beginning of the rabbit hole.
authorMike Stump <mrs@apple.com>
Fri, 7 Aug 2009 18:05:12 +0000 (18:05 +0000)
committerMike Stump <mrs@apple.com>
Fri, 7 Aug 2009 18:05:12 +0000 (18:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78393 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/ASTContext.h
lib/AST/ASTContext.cpp
lib/AST/DeclCXX.cpp
lib/CodeGen/CGCXX.cpp
lib/CodeGen/CodeGenTypes.cpp

index 0822d2ae30fdd2bb3f5c5d3376b23fd3b23fb073..2cc9bd40ec6ad12bd2564c945f3b9149305db8ac 100644 (file)
@@ -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 <stddef.h>. The sizeof operator requires this (C99 6.5.3.4p4).
index 404593452c231dec973bab72dddb26cfb4982c78..d31f1fb16e15e9357bf381877d6eb3828abfd597 100644 (file)
@@ -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<TagDecl*>(Decl));
 }
 
 /// getSizeType - Return the unique type for "size_t" (C99 7.17), the result 
index 52619e9920780ba53e833632b52c2280045ef13a..e07eae7b20a1f7bb1fb972532e2c71bfab5f16fa 100644 (file)
@@ -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<CXXRecordDecl*>(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<CXXRecordDecl*>(getParent()));
+  QualType ClassTy = Context.getTagDeclType(getParent());
   if (PointeeType.getUnqualifiedType() != ClassTy)
     return false;
 
index f1a5e1cca4a326c82b8358f99eb75e53f993fa52..00993be161bd9164c182a203f99040577eae5858 100644 (file)
@@ -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<CXXRecordDecl*>(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<CXXRecordDecl*>(RD));
+  ClassTy = getContext().getTagDeclType(RD);
   mangleCXXVtable(ClassTy, getContext(), Out);
   const char *Name = OutName.c_str();
   llvm::GlobalVariable::LinkageTypes linktype;
index 0cb0c72f2ec16bf6ac6d08ec9a134bcdaca4ee2f..7b1b85c64ca93bfc0989b23e46cbc9c6afe04d6a 100644 (file)
@@ -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<TagDecl*>(TD)).getTypePtr();
+  const Type *Key = Context.getTagDeclType(TD).getTypePtr();
   llvm::DenseMap<const Type*, llvm::PATypeHolder>::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<TagDecl*>(TD)).getTypePtr();
+    Context.getTagDeclType(TD).getTypePtr();
   llvm::DenseMap<const Type*, llvm::PATypeHolder>::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<TagDecl*>(TD)).getTypePtr();
+    Context.getTagDeclType(TD).getTypePtr();
   llvm::DenseMap<const Type*, CGRecordLayout *>::iterator I
     = CGRecordLayouts.find(Key);
   assert (I != CGRecordLayouts.end()