@@ -126,11 +126,7 @@ Parser::ParseStatementOrDeclaration(StmtVector &Stmts,
126126 Stmts, StmtCtx, TrailingElseLoc, CXX11Attrs, GNUOrMSAttrs);
127127 MaybeDestroyTemplateIds ();
128128
129- CXX11Attrs.takeAllFrom (GNUOrMSAttrs);
130- if (!CXX11Attrs.Range .getBegin ().isValid ())
131- CXX11Attrs.Range .setBegin (GNUOrMSAttrs.Range .getBegin ());
132- if (GNUOrMSAttrs.Range .getEnd ().isValid ())
133- CXX11Attrs.Range .setEnd (GNUOrMSAttrs.Range .getEnd ());
129+ takeAndConcatenateAttrs (CXX11Attrs, std::move (GNUOrMSAttrs));
134130
135131 assert ((CXX11Attrs.empty () || Res.isInvalid () || Res.isUsable ()) &&
136132 " attributes on empty statement" );
@@ -208,11 +204,10 @@ StmtResult Parser::ParseStatementOrDeclarationAfterAttributes(
208204 // Both C++11 and GNU attributes preceding the label appertain to the
209205 // label, so put them in a single list to pass on to
210206 // ParseLabeledStatement().
211- ParsedAttributes Attrs (AttrFactory);
212- takeAndConcatenateAttrs (CXX11Attrs, GNUAttrs, Attrs);
207+ takeAndConcatenateAttrs (CXX11Attrs, std::move (GNUAttrs));
213208
214209 // identifier ':' statement
215- return ParseLabeledStatement (Attrs , StmtCtx);
210+ return ParseLabeledStatement (CXX11Attrs , StmtCtx);
216211 }
217212
218213 // Look up the identifier, and typo-correct it to a keyword if it's not
@@ -303,9 +298,7 @@ StmtResult Parser::ParseStatementOrDeclarationAfterAttributes(
303298
304299 case tok::kw_template: {
305300 SourceLocation DeclEnd;
306- ParsedAttributes Attrs (AttrFactory);
307301 ParseTemplateDeclarationOrSpecialization (DeclaratorContext::Block, DeclEnd,
308- Attrs,
309302 getAccessSpecifierIfPresent ());
310303 return StmtError ();
311304 }
0 commit comments