Author: dblaikie Date: Thu May 2 09:30:49 2019 New Revision: 359800 URL: http://llvm.org/viewvc/llvm-project?rev=359800&view=rev Log: Do not warn on switches over enums that do not use [[maybe_unused]] enumerators
PR36231, [dcl.attr.unused]p3 Reviewers: aaron.ballman Differential Revision: https://reviews.llvm.org/D61444 Modified: cfe/trunk/lib/Sema/SemaStmt.cpp cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p3.cpp Modified: cfe/trunk/lib/Sema/SemaStmt.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=359800&r1=359799&r2=359800&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaStmt.cpp (original) +++ cfe/trunk/lib/Sema/SemaStmt.cpp Thu May 2 09:30:49 2019 @@ -1162,6 +1162,9 @@ Sema::ActOnFinishSwitchStmt(SourceLocati break; } + if (EI->second->hasAttr<UnusedAttr>()) + continue; + // Drop unneeded case values while (CI != CaseVals.end() && CI->first < EI->first) CI++; Modified: cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p3.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p3.cpp?rev=359800&r1=359799&r2=359800&view=diff ============================================================================== --- cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p3.cpp (original) +++ cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p3.cpp Thu May 2 09:30:49 2019 @@ -5,9 +5,17 @@ static_assert(__has_cpp_attribute(maybe_ struct [[maybe_unused]] S {}; +enum E1 { + EnumVal [[maybe_unused]], + UsedEnumVal, +}; + void f() { int x; // expected-warning {{unused variable}} typedef int I; // expected-warning {{unused typedef 'I'}} + E1 e; + switch (e) { // expected-warning {{enumeration value 'UsedEnumVal' not handled in switch}} + } // Should not warn about these due to not being used. [[maybe_unused]] int y; @@ -17,10 +25,16 @@ void f() { S s; maybe_unused_int test; y = 12; + switch (e) { + case UsedEnumVal: + break; + } } #ifdef EXT // expected-warning@6 {{use of the 'maybe_unused' attribute is a C++17 extension}} -// expected-warning@13 {{use of the 'maybe_unused' attribute is a C++17 extension}} -// expected-warning@14 {{use of the 'maybe_unused' attribute is a C++17 extension}} +// expected-warning@9 {{use of the 'maybe_unused' attribute is a C++17 extension}} +// expected-warning@9 {{attributes on an enumerator declaration are a C++17 extension}} +// expected-warning@21 {{use of the 'maybe_unused' attribute is a C++17 extension}} +// expected-warning@22 {{use of the 'maybe_unused' attribute is a C++17 extension}} #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits