diff --git a/CodeGen/CGExpr.cpp b/CodeGen/CGExpr.cpp
index c57b38d..3d39291 100644
--- a/CodeGen/CGExpr.cpp
+++ b/CodeGen/CGExpr.cpp
@@ -398,12 +398,12 @@
   FieldDecl *Field = E->getMemberDecl();
   unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
   llvm::Value *Idxs[2] = { llvm::Constant::getNullValue(llvm::Type::Int32Ty), 
-			   llvm::ConstantInt::get(llvm::Type::Int32Ty, idx) };
+                           llvm::ConstantInt::get(llvm::Type::Int32Ty, idx) };
   if (E->isArrow()) {
     QualType PTy = cast<PointerType>(E->getBase()->getType())->getPointeeType();
     BaseValue =  Builder.CreateBitCast(BaseValue, 
-				       llvm::PointerType::get(ConvertType(PTy)),
-				       "tmp");
+                                       llvm::PointerType::get(ConvertType(PTy)),
+                                       "tmp");
   }
 
   return LValue::MakeAddr(Builder.CreateGEP(BaseValue,Idxs, Idxs + 2, "tmp"));
diff --git a/CodeGen/CodeGenFunction.cpp b/CodeGen/CodeGenFunction.cpp
index 9e3f1ce..0795348 100644
--- a/CodeGen/CodeGenFunction.cpp
+++ b/CodeGen/CodeGenFunction.cpp
@@ -128,7 +128,7 @@
 
 /// getRecordLayoutInfo - Return record layout info.
 RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT,
-						       QualType RTy) {
+                                                       QualType RTy) {
   assert (isa<RecordType>(RTy) 
           && "Unexpected type. RecordType expected here.");
 
diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp
index ae6754c..4aaf13f 100644
--- a/CodeGen/CodeGenTypes.cpp
+++ b/CodeGen/CodeGenTypes.cpp
@@ -26,7 +26,7 @@
 
 CodeGenTypes::~CodeGenTypes() {
   for(llvm::DenseMap<const llvm::Type *, RecordLayoutInfo *>::iterator
-	I = RecordLayouts.begin(), E = RecordLayouts.end();
+        I = RecordLayouts.begin(), E = RecordLayouts.end();
       I != E; ++I)
     delete I->second;
   RecordLayouts.clear();
@@ -171,9 +171,9 @@
       // If this is nested record and this RecordDecl is already under
       // process then return associated OpaqueType for now.
       llvm::DenseMap<const RecordDecl *, llvm::Type *>::iterator 
-	OpaqueI = RecordTypesToResolve.find(RD);
+        OpaqueI = RecordTypesToResolve.find(RD);
       if (OpaqueI != RecordTypesToResolve.end())
-	return OpaqueI->second;
+        return OpaqueI->second;
 
       // Create new OpaqueType now for later use.
       llvm::OpaqueType *OpaqueTy =  llvm::OpaqueType::get();
@@ -182,7 +182,7 @@
       // Layout fields.
       RecordOrganizer *RO = new RecordOrganizer();
       for (unsigned i = 0, e = RD->getNumMembers(); i != e; ++i)
-	RO->addField(RD->getMember(i));
+        RO->addField(RD->getMember(i));
       RO->layoutFields(*this);
 
       // Get llvm::StructType.
@@ -194,7 +194,7 @@
       OpaqueTy->refineAbstractTypeTo(ResultType);
       OpaqueI = RecordTypesToResolve.find(RD);
       assert (OpaqueI != RecordTypesToResolve.end() 
-	      && "Expected RecordDecl in RecordTypesToResolve");
+              && "Expected RecordDecl in RecordTypesToResolve");
       RecordTypesToResolve.erase(OpaqueI);
 
       delete RO;
@@ -302,7 +302,7 @@
   std::vector<const llvm::Type*> Fields;
   unsigned FieldNo = 0;
   for (llvm::SmallVector<const FieldDecl *, 8>::iterator I = FieldDecls.begin(),
-	 E = FieldDecls.end(); I != E; ++I) {
+         E = FieldDecls.end(); I != E; ++I) {
     const FieldDecl *FD = *I;
     const llvm::Type *Ty = CGT.ConvertType(FD->getType());
 
