diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index 1cf75b9..9ca9e28 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -1559,7 +1559,7 @@
                                           sizeof(int32_t));
 
         // Add subranges to array type.
-        for(unsigned i = 0, N = Elements.size(); i < N; ++i) {
+        for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
           SubrangeDesc *SRD = cast<SubrangeDesc>(Elements[i]);
           int64_t Lo = SRD->getLo();
           int64_t Hi = SRD->getHi();
@@ -1580,12 +1580,11 @@
       case DW_TAG_structure_type:
       case DW_TAG_union_type: {
         // Add elements to structure type.
-        for(unsigned i = 0, N = Elements.size(); i < N; ++i) {
+        for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
           DebugInfoDesc *Element = Elements[i];
 
           if (DerivedTypeDesc *MemberDesc = dyn_cast<DerivedTypeDesc>(Element)){
             // Add field or base class.
-
             unsigned Tag = MemberDesc->getTag();
 
             // Extract the basic information.
@@ -1600,6 +1599,7 @@
             // Add name if not "".
             if (!Name.empty())
               AddString(Member, DW_AT_name, DW_FORM_string, Name);
+
             // Add location if available.
             AddSourceLine(Member, MemberDesc->getFile(), MemberDesc->getLine());
 
@@ -1723,7 +1723,7 @@
               }
 
               // Add arguments.
-              for(unsigned i = 1, N = Args.size(); i < N; ++i) {
+              for (unsigned i = 1, N = Args.size(); i < N; ++i) {
                 DIE *Arg = new DIE(DW_TAG_formal_parameter);
                 AddType(Arg, cast<TypeDesc>(Args[i]), Unit);
                 AddUInt(Arg, DW_AT_artificial, DW_FORM_flag, 1);
@@ -1743,7 +1743,7 @@
       }
       case DW_TAG_enumeration_type: {
         // Add enumerators to enumeration type.
-        for(unsigned i = 0, N = Elements.size(); i < N; ++i) {
+        for (unsigned i = 0, N = Elements.size(); i < N; ++i) {
           EnumeratorDesc *ED = cast<EnumeratorDesc>(Elements[i]);
           const std::string &Name = ED->getName();
           int64_t Value = ED->getValue();
@@ -1762,7 +1762,7 @@
         AddType(&Buffer, dyn_cast<TypeDesc>(Elements[0]), Unit);
 
         // Add arguments.
-        for(unsigned i = 1, N = Elements.size(); i < N; ++i) {
+        for (unsigned i = 1, N = Elements.size(); i < N; ++i) {
           DIE *Arg = new DIE(DW_TAG_formal_parameter);
           AddType(Arg, cast<TypeDesc>(Elements[i]), Unit);
           Buffer.AddChild(Arg);
@@ -1776,8 +1776,10 @@
 
     // Add size if non-zero (derived types don't have a size.)
     if (Size) AddUInt(&Buffer, DW_AT_byte_size, 0, Size);
+
     // Add name if not anonymous or intermediate type.
     if (!Name.empty()) AddString(&Buffer, DW_AT_name, DW_FORM_string, Name);
+
     // Add source line info if available.
     AddSourceLine(&Buffer, TyDesc->getFile(), TyDesc->getLine());
   }
