r229446 - Parse: return true from ParseCXX11AttributeArgs if an attribute was added

Saleem Abdulrasool compnerd at compnerd.org
Mon Feb 16 14:26:52 PST 2015

Author: compnerd
Date: Mon Feb 16 16:26:52 2015
New Revision: 229446

URL: http://llvm.org/viewvc/llvm-project?rev=229446&view=rev
Parse: return true from ParseCXX11AttributeArgs if an attribute was added

In the case that we diagnosed an invalid attribute due to missing or present
arguments, we would return false, indicating to the caller that the parsing
failed.  However, we would have added the attribute in ParseAttributeArgsCommon
(which may have been called indirectly through ParseGNUAttributeArgs).
Returning true in this case ensures that a second copy of the attribute is not

I haven't added a test case for this as the existing test will cover this with
the next commit which diagnoses a C++14 attribute applied in C++11 mode.  Rather
than duplicating the existing test case, allow the tree to remain without a test
between this and the next change.  We would see double warnings in the
[[deprecated()]] applied to a declaration in C++11 mode, which will cause an
error in the cxx0x-attributes test.


Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=229446&r1=229445&r2=229446&view=diff
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Mon Feb 16 16:26:52 2015
@@ -3472,7 +3472,6 @@ bool Parser::ParseCXX11AttributeArgs(Ide
         // The attribute was allowed to have arguments, but none were provided
         // even though the attribute parsed successfully. This is an error.
         Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;
-        return false;
       } else if (!Attr->getMaxArgs()) {
         // The attribute parsed successfully, but was not allowed to have any
         // arguments. It doesn't matter whether any were provided -- the
@@ -3480,7 +3479,6 @@ bool Parser::ParseCXX11AttributeArgs(Ide
         Diag(LParenLoc, diag::err_cxx11_attribute_forbids_arguments)
             << AttrName
             << FixItHint::CreateRemoval(SourceRange(LParenLoc, *EndLoc));
-        return false;

More information about the cfe-commits mailing list