<div dir="ltr">Nice! Chipping away at those warnings without flags. :)</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 10, 2014 at 11:06 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: majnemer<br>
Date: Mon Feb 10 13:06:37 2014<br>
New Revision: 201102<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=201102&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=201102&view=rev</a><br>
Log:<br>
Basic: Clean up malformed pragma diagnostics<br>
<br>
Create a new diagnostic, -Wignored-pragmas and use it to handle any<br>
case where a pragma would have a side effect but is ignored.<br>
<br>
Modified:<br>
cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>
cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td<br>
cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
cfe/trunk/lib/Parse/ParseOpenMP.cpp<br>
cfe/trunk/lib/Parse/ParsePragma.cpp<br>
cfe/trunk/test/Misc/warning-flags.c<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Mon Feb 10 13:06:37 2014<br>
@@ -339,6 +339,8 @@ def UninitializedStaticSelfInit : DiagGr<br>
def Uninitialized : DiagGroup<"uninitialized", [UninitializedSometimes,<br>
UninitializedStaticSelfInit]>;<br>
def UnknownPragmas : DiagGroup<"unknown-pragmas">;<br>
+def IgnoredPragmas : DiagGroup<"ignored-pragmas">;<br>
+def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas]>;<br>
def UnknownWarningOption : DiagGroup<"unknown-warning-option">;<br>
def NSobjectAttribute : DiagGroup<"NSObject-attribute">;<br>
def UnknownAttributes : DiagGroup<"unknown-attributes">;<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticLexKinds.td Mon Feb 10 13:06:37 2014<br>
@@ -437,7 +437,8 @@ def err_pragma_message_malformed : Error<br>
def err_pragma_push_pop_macro_malformed : Error<<br>
"pragma %0 requires a parenthesized string">;<br>
def warn_pragma_pop_macro_no_push : Warning<<br>
- "pragma pop_macro could not pop '%0', no matching push_macro">;<br>
+ "pragma pop_macro could not pop '%0', no matching push_macro">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_message : Warning<"%0">,<br>
InGroup<PoundPragmaMessage>, DefaultWarnNoWerror;<br>
def err_pragma_message : Error<"%0">;<br>
@@ -472,7 +473,7 @@ def warn_pragma_diagnostic_unknown_warni<br>
InGroup<UnknownPragmas>;<br>
// - #pragma __debug<br>
def warn_pragma_debug_unexpected_command : Warning<<br>
- "unexpected debug command '%0'">;<br>
+ "unexpected debug command '%0'">, InGroup<IgnoredPragmas>;<br>
<br>
def err_defined_macro_name : Error<"'defined' cannot be used as a macro name">;<br>
def err_paste_at_start : Error<<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Mon Feb 10 13:06:37 2014<br>
@@ -763,32 +763,40 @@ def err_type_trait_arity : Error<<br>
// Language specific pragmas<br>
// - Generic warnings<br>
def warn_pragma_expected_lparen : Warning<<br>
- "missing '(' after '#pragma %0' - ignoring">;<br>
+ "missing '(' after '#pragma %0' - ignoring">, InGroup<IgnoredPragmas>;<br>
def warn_pragma_expected_rparen : Warning<<br>
- "missing ')' after '#pragma %0' - ignoring">;<br>
+ "missing ')' after '#pragma %0' - ignoring">, InGroup<IgnoredPragmas>;<br>
def warn_pragma_expected_identifier : Warning<<br>
- "expected identifier in '#pragma %0' - ignored">;<br>
+ "expected identifier in '#pragma %0' - ignored">, InGroup<IgnoredPragmas>;<br>
def warn_pragma_ms_struct : Warning<<br>
- "incorrect use of '#pragma ms_struct on|off' - ignored">;<br>
+ "incorrect use of '#pragma ms_struct on|off' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_extra_tokens_at_eol : Warning<<br>
- "extra tokens at end of '#pragma %0' - ignored">;<br>
+ "extra tokens at end of '#pragma %0' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
+def warn_pragma_expected_punc : Warning<<br>
+ "expected ')' or ',' in '#pragma %0'">, InGroup<IgnoredPragmas>;<br>
// - #pragma options<br>
def warn_pragma_options_expected_align : Warning<<br>
- "expected 'align' following '#pragma options' - ignored">;<br>
+ "expected 'align' following '#pragma options' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_align_expected_equal : Warning<<br>
- "expected '=' following '#pragma %select{align|options align}0' - ignored">;<br>
+ "expected '=' following '#pragma %select{align|options align}0' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_align_invalid_option : Warning<<br>
- "invalid alignment option in '#pragma %select{align|options align}0' - ignored">;<br>
+ "invalid alignment option in '#pragma %select{align|options align}0' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
// - #pragma pack<br>
def warn_pragma_pack_invalid_action : Warning<<br>
- "unknown action for '#pragma pack' - ignored">;<br>
+ "unknown action for '#pragma pack' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_pack_malformed : Warning<<br>
- "expected integer or identifier in '#pragma pack' - ignored">;<br>
+ "expected integer or identifier in '#pragma pack' - ignored">,<br>
+ InGroup<IgnoredPragmas>;<br>
// - #pragma unused<br>
def warn_pragma_unused_expected_var : Warning<<br>
- "expected '#pragma unused' argument to be a variable name">;<br>
-def warn_pragma_unused_expected_punc : Warning<<br>
- "expected ')' or ',' in '#pragma unused'">;<br>
+ "expected '#pragma unused' argument to be a variable name">,<br>
+ InGroup<IgnoredPragmas>;<br>
// - #pragma fp_contract<br>
def err_pragma_fp_contract_scope : Error<<br>
"'#pragma fp_contract' can only appear at file scope or at the start of a "<br>
@@ -808,11 +816,11 @@ def err_not_opencl_storage_class_specifi<br>
<br>
// OpenCL EXTENSION pragma (OpenCL 1.1 [9.1])<br>
def warn_pragma_expected_colon : Warning<<br>
- "missing ':' after %0 - ignoring">;<br>
+ "missing ':' after %0 - ignoring">, InGroup<IgnoredPragmas>;<br>
def warn_pragma_expected_enable_disable : Warning<<br>
- "expected 'enable' or 'disable' - ignoring">;<br>
+ "expected 'enable' or 'disable' - ignoring">, InGroup<IgnoredPragmas>;<br>
def warn_pragma_unknown_extension : Warning<<br>
- "unknown OpenCL extension %0 - ignoring">;<br>
+ "unknown OpenCL extension %0 - ignoring">, InGroup<IgnoredPragmas>;<br>
<br>
def err_seh_expected_handler : Error<<br>
"expected '__except' or '__finally' block">;<br>
@@ -837,7 +845,7 @@ def err_omp_unknown_directive : Error <<br>
def err_omp_unexpected_directive : Error <<br>
"unexpected OpenMP directive '#pragma omp %0'">;<br>
def err_omp_expected_punc : Error <<br>
- "expected ',' or ')' in %select{'#pragma omp %1'|'%1' clause}0">;<br>
+ "expected ',' or ')' in '%0' clause">;<br>
def err_omp_unexpected_clause : Error <<br>
"unexpected OpenMP clause '%0' in directive '#pragma omp %1'">;<br>
def err_omp_more_one_clause : Error <<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Feb 10 13:06:37 2014<br>
@@ -469,22 +469,28 @@ def err_opencl_half_return : Error<<br>
"declaring function return value of type %0 is not allowed; did you forget * ?">;<br>
def warn_enum_value_overflow : Warning<"overflow in enumeration value">;<br>
def warn_pragma_options_align_reset_failed : Warning<<br>
- "#pragma options align=reset failed: %0">;<br>
+ "#pragma options align=reset failed: %0">,<br>
+ InGroup<IgnoredPragmas>;<br>
def err_pragma_options_align_mac68k_target_unsupported : Error<<br>
"mac68k alignment pragma is not supported on this target">;<br>
def warn_pragma_pack_invalid_alignment : Warning<<br>
- "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">;<br>
+ "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">,<br>
+ InGroup<IgnoredPragmas>;<br>
// Follow the MSVC implementation.<br>
def warn_pragma_pack_show : Warning<"value of #pragma pack(show) == %0">;<br>
def warn_pragma_pack_pop_identifer_and_alignment : Warning<<br>
"specifying both a name and alignment to 'pop' is undefined">;<br>
-def warn_pragma_pack_pop_failed : Warning<"#pragma pack(pop, ...) failed: %0">;<br>
-def warn_pragma_ms_struct_failed : Warning<"#pramga ms_struct can not be used with dynamic classes or structures">, InGroup<IgnoredAttributes>;<br>
+def warn_pragma_pack_pop_failed : Warning<"#pragma pack(pop, ...) failed: %0">,<br>
+ InGroup<IgnoredPragmas>;<br>
+def warn_pragma_ms_struct_failed : Warning<"#pramga ms_struct can not be used with dynamic classes or structures">,<br>
+ InGroup<IgnoredPragmas>;<br>
<br>
def warn_pragma_unused_undeclared_var : Warning<<br>
- "undeclared variable %0 used as an argument for '#pragma unused'">;<br>
+ "undeclared variable %0 used as an argument for '#pragma unused'">,<br>
+ InGroup<IgnoredPragmas>;<br>
def warn_pragma_unused_expected_var_arg : Warning<<br>
- "only variables can be arguments to '#pragma unused'">;<br>
+ "only variables can be arguments to '#pragma unused'">,<br>
+ InGroup<IgnoredPragmas>;<br>
def err_pragma_push_visibility_mismatch : Error<<br>
"#pragma visibility push with no matching #pragma visibility pop">;<br>
def note_surrounding_namespace_ends_here : Note<<br>
<br>
Modified: cfe/trunk/lib/Parse/ParseOpenMP.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseOpenMP.cpp?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseOpenMP.cpp?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Parse/ParseOpenMP.cpp (original)<br>
+++ cfe/trunk/lib/Parse/ParseOpenMP.cpp Mon Feb 10 13:06:37 2014<br>
@@ -367,7 +367,7 @@ OMPClause *Parser::ParseOpenMPVarListCla<br>
} else if (Tok.isNot(tok::r_paren) &&<br>
Tok.isNot(tok::annot_pragma_openmp_end)) {<br>
Diag(Tok, diag::err_omp_expected_punc)<br>
- << 1 << getOpenMPClauseName(Kind);<br>
+ << getOpenMPClauseName(Kind);<br>
}<br>
}<br>
<br>
<br>
Modified: cfe/trunk/lib/Parse/ParsePragma.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParsePragma.cpp?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParsePragma.cpp?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Parse/ParsePragma.cpp (original)<br>
+++ cfe/trunk/lib/Parse/ParsePragma.cpp Mon Feb 10 13:06:37 2014<br>
@@ -530,7 +530,7 @@ void PragmaUnusedHandler::HandlePragma(P<br>
}<br>
<br>
// Illegal token!<br>
- PP.Diag(Tok.getLocation(), diag::warn_pragma_unused_expected_punc);<br>
+ PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_punc) << "unused";<br>
return;<br>
}<br>
<br>
<br>
Modified: cfe/trunk/test/Misc/warning-flags.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/warning-flags.c?rev=201102&r1=201101&r2=201102&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/warning-flags.c?rev=201102&r1=201101&r2=201102&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Misc/warning-flags.c (original)<br>
+++ cfe/trunk/test/Misc/warning-flags.c Mon Feb 10 13:06:37 2014<br>
@@ -18,7 +18,7 @@ This test serves two purposes:<br>
<br>
The list of warnings below should NEVER grow. It should gradually shrink to 0.<br>
<br>
-CHECK: Warnings without flags (133):<br>
+CHECK: Warnings without flags (111):<br>
CHECK-NEXT: ext_delete_void_ptr_operand<br>
CHECK-NEXT: ext_expected_semi_decl_list<br>
CHECK-NEXT: ext_explicit_specialization_storage_class<br>
@@ -108,30 +108,8 @@ CHECK-NEXT: warn_pp_convert_lhs_to_pos<br>
CHECK-NEXT: warn_pp_convert_rhs_to_positive<br>
CHECK-NEXT: warn_pp_expr_overflow<br>
CHECK-NEXT: warn_pp_line_decimal<br>
-CHECK-NEXT: warn_pragma_align_expected_equal<br>
-CHECK-NEXT: warn_pragma_align_invalid_option<br>
-CHECK-NEXT: warn_pragma_debug_unexpected_command<br>
-CHECK-NEXT: warn_pragma_expected_colon<br>
-CHECK-NEXT: warn_pragma_expected_enable_disable<br>
-CHECK-NEXT: warn_pragma_expected_identifier<br>
-CHECK-NEXT: warn_pragma_expected_lparen<br>
-CHECK-NEXT: warn_pragma_expected_rparen<br>
-CHECK-NEXT: warn_pragma_extra_tokens_at_eol<br>
-CHECK-NEXT: warn_pragma_ms_struct<br>
-CHECK-NEXT: warn_pragma_options_align_reset_failed<br>
-CHECK-NEXT: warn_pragma_options_expected_align<br>
-CHECK-NEXT: warn_pragma_pack_invalid_action<br>
-CHECK-NEXT: warn_pragma_pack_invalid_alignment<br>
-CHECK-NEXT: warn_pragma_pack_malformed<br>
-CHECK-NEXT: warn_pragma_pack_pop_failed<br>
CHECK-NEXT: warn_pragma_pack_pop_identifer_and_alignment<br>
CHECK-NEXT: warn_pragma_pack_show<br>
-CHECK-NEXT: warn_pragma_pop_macro_no_push<br>
-CHECK-NEXT: warn_pragma_unknown_extension<br>
-CHECK-NEXT: warn_pragma_unused_expected_punc<br>
-CHECK-NEXT: warn_pragma_unused_expected_var<br>
-CHECK-NEXT: warn_pragma_unused_expected_var_arg<br>
-CHECK-NEXT: warn_pragma_unused_undeclared_var<br>
CHECK-NEXT: warn_property_attr_mismatch<br>
CHECK-NEXT: warn_property_attribute<br>
CHECK-NEXT: warn_property_getter_owning_mismatch<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>