[PATCH] D17865: Add replacement = "xxx" to DeprecatedAttr.
Manman Ren via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 9 11:07:41 PST 2016
manmanren added a comment.
Hi Aaron,
Thanks for the review!
> I like the idea of a potential fixit being provided by the attribute, but I do not agree with the way the feature is surfaced in this patch.
>
> For the GNU-style attribute, the named argument functionality is sufficiently novel syntax that I would strongly like to avoid it, especially since __attribute__((deprecated)) is supported by multiple compilers.
I suggested `replacement = ""` mostly for its explicitness, especially when we already have an optional message argument "".
If a user only want to specify replacement without a message, we can say deprecated(replacement = "xxx")
With 'replacement =`, the user will need to specify an empty message.
But your concern makes sense too. We can support the following:
deprecated("xxx") --> a message
deprecated("xxx, "fixit") --> a message and a fixit
> We should not be adding this functionality to the C++-style attribute in the gnu namespace; that's not our vendor namespace to modify.
I believe the patch currently does not change the C++-style attribute. Of course, I should add testing cases to verify.
I wouldn't be opposed to adding a clang namespace where we support this feature, however.
> We definitely need to make sure we are not modifying the functionality for the C++ standards-based attribute
Is this ("the C++ standards-based attribute") the same as "the C++-style attribute" you mentioned above?
, or the __declspec based attribute (for pretty printing, as well as parsing, etc).
Yes, I should add testing cases to make sure __declspec is not changed at all with this patch.
> So this change is missing a lot of tests to make sure we do not support this feature in places where it doesn't belong.
================
Comment at: include/clang/Basic/Attr.td:716
@@ -715,2 +715,3 @@
+ StringArgument<"Replacement", 1>];
let Documentation = [Undocumented];
}
----------------
aaron.ballman wrote:
> Would you mind adding some documentation to the attribute since we're changing it?
Yes, I should.
================
Comment at: lib/Parse/ParseDecl.cpp:1048
@@ +1047,3 @@
+/// \brief Parse the contents of the "deprecated" attribute.
+unsigned Parser::ParseDeprecatedAttribute(IdentifierInfo &Deprecated,
+ SourceLocation DeprecatedLoc,
----------------
aaron.ballman wrote:
> This also gets called for attributes parsed in the gnu:: namespace, which means that you are modifying the behavior of gnu::deprecated(), which we should not do unless GCC also supports this feature.
Yes, I will fix this.
================
Comment at: lib/Parse/ParseDecl.cpp:1068
@@ +1067,3 @@
+ if (Keyword != Ident_replacement) {
+ }
+
----------------
aaron.ballman wrote:
> I assume this was meant to do something useful?
Yes, I should emit a diagnostic.
================
Comment at: lib/Sema/SemaDeclAttr.cpp:5074
@@ +5073,3 @@
+ StringRef Str, Replacement;
+ if ((Attr.isArgExpr(0) && Attr.getArgAsExpr(0) &&
+ !S.checkStringLiteralArgumentAttr(Attr, 0, Str))||
----------------
aaron.ballman wrote:
> This check should be moved above the extension warning above -- we only want to diagnose the extension if the attribute is actually applied.
Agree.
================
Comment at: test/SemaCXX/cxx11-attr-print.cpp:16
@@ -15,3 +15,3 @@
-// CHECK: int b {{\[}}[gnu::deprecated("warning")]];
+// CHECK: int b {{\[}}[gnu::deprecated("warning", "")]];
int b [[gnu::deprecated("warning")]];
----------------
aaron.ballman wrote:
> This is a bug; we should not be hijacking the gnu attribute space.
Yes, I will fix this.
================
Comment at: test/SemaCXX/cxx11-attr-print.cpp:18
@@ -17,2 +17,3 @@
int b [[gnu::deprecated("warning")]];
+// CHECK: __attribute__((deprecated("", "")));
----------------
aaron.ballman wrote:
> I would like a test that verifies we don't print an empty fixit literal when using the C++14 `[[deprecated]]` attribute. Same for `__declspec(deprecated)`.
Will do.
http://reviews.llvm.org/D17865
More information about the cfe-commits
mailing list