Author: aaronballman Date: Wed Oct 18 09:59:27 2017 New Revision: 316096 URL: http://llvm.org/viewvc/llvm-project?rev=316096&view=rev Log: Enable support for the [[maybe_unused]] attribute from WG14 N2053 when enabling double square bracket attributes in C code.
Added: cfe/trunk/test/Sema/c2x-maybe_unused-errors.c cfe/trunk/test/Sema/c2x-maybe_unused.c Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/lib/Sema/SemaExpr.cpp Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=316096&r1=316095&r2=316096&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Wed Oct 18 09:59:27 2017 @@ -1936,7 +1936,8 @@ def ObjCRequiresPropertyDefs : Inheritab } def Unused : InheritableAttr { - let Spellings = [CXX11<"", "maybe_unused", 201603>, GCC<"unused">]; + let Spellings = [CXX11<"", "maybe_unused", 201603>, GCC<"unused">, + C2x<"", "maybe_unused">]; let Subjects = SubjectList<[Var, ObjCIvar, Type, Enum, EnumConstant, Label, Field, ObjCMethod, FunctionLike], WarnDiag, "ExpectedForMaybeUnused">; Modified: cfe/trunk/lib/Sema/SemaExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=316096&r1=316095&r2=316096&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) +++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Oct 18 09:59:27 2017 @@ -79,7 +79,8 @@ static void DiagnoseUnusedOfDecl(Sema &S if (const auto *A = D->getAttr<UnusedAttr>()) { // [[maybe_unused]] should not diagnose uses, but __attribute__((unused)) // should diagnose them. - if (A->getSemanticSpelling() != UnusedAttr::CXX11_maybe_unused) { + if (A->getSemanticSpelling() != UnusedAttr::CXX11_maybe_unused && + A->getSemanticSpelling() != UnusedAttr::C2x_maybe_unused) { const Decl *DC = cast_or_null<Decl>(S.getCurObjCLexicalContext()); if (DC && !DC->hasAttr<UnusedAttr>()) S.Diag(Loc, diag::warn_used_but_marked_unused) << D->getDeclName(); Added: cfe/trunk/test/Sema/c2x-maybe_unused-errors.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/c2x-maybe_unused-errors.c?rev=316096&view=auto ============================================================================== --- cfe/trunk/test/Sema/c2x-maybe_unused-errors.c (added) +++ cfe/trunk/test/Sema/c2x-maybe_unused-errors.c Wed Oct 18 09:59:27 2017 @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused -fdouble-square-bracket-attributes -verify %s + +struct [[maybe_unused]] S1 { // ok + int a [[maybe_unused]]; +}; +struct [[maybe_unused maybe_unused]] S2 { // expected-error {{attribute 'maybe_unused' cannot appear multiple times in an attribute specifier}} + int a; +}; +struct [[maybe_unused("Wrong")]] S3 { // expected-error {{'maybe_unused' cannot have an argument list}} + int a; +}; + Added: cfe/trunk/test/Sema/c2x-maybe_unused.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/c2x-maybe_unused.c?rev=316096&view=auto ============================================================================== --- cfe/trunk/test/Sema/c2x-maybe_unused.c (added) +++ cfe/trunk/test/Sema/c2x-maybe_unused.c Wed Oct 18 09:59:27 2017 @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused -fdouble-square-bracket-attributes -verify %s + +struct [[maybe_unused]] S1 { // ok + int a [[maybe_unused]]; +}; + +enum [[maybe_unused]] E1 { + EnumVal [[maybe_unused]] +}; + +[[maybe_unused]] void unused_func([[maybe_unused]] int parm) { + typedef int maybe_unused_int [[maybe_unused]]; + [[maybe_unused]] int I; +} + +void f1(void) { + int x; // expected-warning {{unused variable}} + typedef int I; // expected-warning {{unused typedef 'I'}} + + // Should not warn about these due to not being used. + [[maybe_unused]] int y; + typedef int maybe_unused_int [[maybe_unused]]; + + // Should not warn about these uses. + struct S1 s; + maybe_unused_int test; + y = 12; +} + +void f2(void); +[[maybe_unused]] void f2(void); + +void f2(void) { +} + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits