diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index 32adc1f..390fd34 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -142,7 +142,7 @@
             new LateParsedAttribute(this, *AttrName, AttrNameLoc);
           LateAttrs->push_back(LA);
 
-          // Attribute in a class are parsed at the end of the class, along
+          // Attributes in a class are parsed at the end of the class, along
           // with other late-parsed declarations.
           if (!ClassStack.empty() && !LateAttrs->parseSoon())
             getCurrentClass().LateParsedDeclarations.push_back(LA);
@@ -824,7 +824,7 @@
 }
 
 
-// Late Parsed Attribute:
+// Late Parsed Attributes:
 // See other examples of late parsing in lib/Parse/ParseCXXInlineMethods
 
 void Parser::LateParsedDeclaration::ParseLexedAttributes() {}
@@ -2793,15 +2793,15 @@
       // These are attributes following class specifiers.
       // To produce better diagnostic, we parse them when
       // parsing class specifier.
-      ParsedAttributesWithRange Attribute(AttrFactory);
+      ParsedAttributesWithRange Attributes(AttrFactory);
       ParseClassSpecifier(Kind, Loc, DS, TemplateInfo, AS,
-                          EnteringContext, DSContext, Attribute);
+                          EnteringContext, DSContext, Attributes);
 
       // If there are attributes following class specifier,
       // take them over and handle them here.
-      if (!Attribute.empty()) {
+      if (!Attributes.empty()) {
         AttrsLastTime = true;
-        attrs.takeAllFrom(Attribute);
+        attrs.takeAllFrom(Attributes);
       }
       continue;
     }
@@ -2949,7 +2949,7 @@
     ParsingFieldDeclarator DeclaratorInfo(*this, DS);
     DeclaratorInfo.D.setCommaLoc(CommaLoc);
 
-    // Attribute are only allowed here on successive declarators.
+    // Attributes are only allowed here on successive declarators.
     if (!FirstDeclarator)
       MaybeParseGNUAttributes(DeclaratorInfo.D);
 
@@ -3162,7 +3162,7 @@
     IsScopedUsingClassTag = Tok.is(tok::kw_class);
     ScopedEnumKWLoc = ConsumeToken();
 
-    // Attribute are not allowed between these keywords.  Diagnose,
+    // Attributes are not allowed between these keywords.  Diagnose,
     // but then just treat them like they appeared in the right place.
     ProhibitAttributes(attrs);
 
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index 7f35d54..76ec647 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -1052,7 +1052,7 @@
                                  const ParsedTemplateInfo &TemplateInfo,
                                  AccessSpecifier AS, 
                                  bool EnteringContext, DeclSpecContext DSC, 
-                                 ParsedAttributesWithRange &Attribute) {
+                                 ParsedAttributesWithRange &Attributes) {
   DeclSpec::TST TagType;
   if (TagTokKind == tok::kw_struct)
     TagType = DeclSpec::TST_struct;
@@ -1250,7 +1250,7 @@
   // For these, DSC is DSC_type_specifier.
 
   // If there are attributes after class name, parse them.
-  MaybeParseCXX0XAttributes(Attribute);
+  MaybeParseCXX0XAttributes(Attributes);
 
   Sema::TagUseKind TUK;
   if (DSC == DSC_trailing)
@@ -1324,7 +1324,7 @@
   // to caller to handle.
   // FIXME: provide fix-it hints if we can.
   if (TUK != Sema::TUK_Reference)
-    ProhibitAttributes(Attribute);
+    ProhibitAttributes(Attributes);
 
   // If this is an elaborated type specifier, and we delayed
   // diagnostics before, just merge them into the current pool.
@@ -2258,7 +2258,7 @@
     HasInitializer = false;
     DeclaratorInfo.setCommaLoc(CommaLoc);
 
-    // Attribute are only allowed on the second declarator.
+    // Attributes are only allowed on the second declarator.
     MaybeParseGNUAttributes(DeclaratorInfo);
 
     if (Tok.isNot(tok::colon))
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp
index 53b0f4a..2c1abe0 100644
--- a/lib/Parse/ParseExprCXX.cpp
+++ b/lib/Parse/ParseExprCXX.cpp
@@ -2403,7 +2403,7 @@
 
     T.consumeClose();
 
-    // Attribute here appertain to the array type. C++11 [expr.new]p5.
+    // Attributes here appertain to the array type. C++11 [expr.new]p5.
     ParsedAttributes Attrs(AttrFactory);
     MaybeParseCXX0XAttributes(Attrs);
 
