> On March 31, 2015, 7:14 p.m., Mark Michelson wrote: > > I don't understand the purpose of this warning. I tried searching for > > details about this warning flag on the internet and came up empty, so I > > can't find any documentation that explains what type of error this check is > > supposed to help avoid. > > > > It appears that the warning is intended to get rid of "extra" parentheses > > where they are unnecessary. The problem is that I don't see anything wrong > > with having them there, especially in macro definitions. > > Diederik de Groot wrote: > Ok you know that to prevent an unintendet assignment where a comparisson > was indended compilers request you to write > > /* comparisson */ > if (x == 1) { > } > but > > /* assignment => most modern compilers will complain*/ > if (x = 1) { /* <= warning raised*/ > } > > so you are forced to write > if ((x = 1)) { > } > instead, to guarantee that you meant to assign a value here. > > But most compilers will not complain if you write the first comparison > between double parantheses > if ((x == 1)) { > } > Which is perfectly legal, as you pointed out. > > But a maintainer of the code might later be in doubt as to what you mean. > Was an assignment was not intended by the original writer (non-obvious). > > clang can be made complain about this (-Wparantheses-equalty or -Wall > -Werror) to make sure this last one is not allowed. > > So this can be considered the reverse of the first warning, where an > assignment requires double parantheses. > > rmudgett wrote: > I think this warning is a backlash from the warning about putting > assignments inside tests that you suppress by adding parentheses. > if ((a = b)) > > At any rate this is a very bad warning and should not be used. > > The parentheses in macros are to prevent unexpected precedence operator > bindings: > #define BAD_MACRO(a,b) a + b > > if (BAD_MACRO(a, b) * 3 != (a + b) * 3) printf("ERROR unexpected > result\n"); > > > Diederik de Groot wrote: > @rmudgett: I agreed, that's why i was asking in my initial description, > if anybody knew of a better way to solve both the macro issue but still > satisfy the parantheses warning. Without having to suppress it. Something > ugly to fix the macro expansion is to use a double negating comparison or > maybe even an inline comparison return TRUE/FALSE. Both of which did not > really strike me as particularly nice. > > I can live with suppressing this warning, but it would be nice if > somebody knew of a nice way to have it both ways. > > > rmudgett wrote: > Please discard this review with predjudice. I see no benefit to this > -Wparentheses-equality option. > > Diederik de Groot wrote: > WOuld have been nice if this Warning would not react to results coming > from macro's (so only plain code), but alas. I guess the AST does not have > that last little detail.
I guess we should drop this one. Maybe someone will come up with a nice solution in the future. There is a open issue on the clang bug report site about this exact warning (currently without a nice solution). - Diederik ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviewboard.asterisk.org/r/4550/#review14987 ----------------------------------------------------------- On April 1, 2015, 3:33 a.m., Diederik de Groot wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviewboard.asterisk.org/r/4550/ > ----------------------------------------------------------- > > (Updated April 1, 2015, 3:33 a.m.) > > > Review request for Asterisk Developers. > > > Bugs: ASTERISK-24917 > https://issues.asterisk.org/jira/browse/ASTERISK-24917 > > > Repository: Asterisk > > > Description > ------- > > clang's static analyzer will throw quite a number warnings / errors during > compilation, some of which can be very helpfull in finding corner-case bugs. > > clang compiler warning:--dev-mode and -Wparentheses-equality > > include/asterisk/linkedlists.h:450 > ================================== > Got rid of the extraneous "()" in the comparison to NULL by negating the > comparison > > include/asterisk/vector.h:261 > ============================= > Removed the extraneous "()". Not particularly happy about this though as they > where used to keep this macro encapsulated (Does however not cause any > compile issues) > > Another possible solutions would be to double negate the comparison !((elem) > != (value)) which would keep everything encapsulated, but does result in a > double negative, which is ugly as well. > > main/format_cap.c:467 > ===================== > Removed the extraneous "()". Not particularly happy about this though as they > where used to keep this macro encapsulated (Does however not cause any > compile issues) > > Another possible solutions would be to double negate the comparison > !((elem)->format != (value)) which would keep everything encapsulated, but > does result in a double negative, which is ugly as well. > > main/format_cap.c:492 > ===================== > Because of the () where removed previously, they are now needed here. > > main/stasis_message_router.c:82 > =============================== > Removed the extraneous "()". Not particularly happy about this though as they > where used to keep this macro encapsulated (Does however not cause any > compile issues) > > Another possible solutions would be to double negate the comparison > !((elem).message_type != (value)) which would keep everything encapsulated, > but does result in a double negative, which is ugly as well. > > main/stdtime/localtime.c:197/208 > ================================ > Removed the extraneous "()". Not particularly happy about this though as they > where used to keep this macro encapsulated (Does however not cause any > compile issues) > > Another possible solutions would be to double negate the comparison > !((sp)->wd[0] != SP_STACK_FLAG) which would keep everything encapsulated, but > does result in a double negative, which is ugly as well. > > more of the same for > ==================== > include/asterisk/dlinkedlists.h:422/431/469 > main/astobj2_hash.c:768 > > --------- > Maybe one of you has a better/nicer solution. > > > Diffs > ----- > > /branches/13/tests/test_linkedlists.c 433444 > /branches/13/main/stdtime/localtime.c 433444 > /branches/13/main/stasis_message_router.c 433444 > /branches/13/main/format_cap.c 433444 > /branches/13/main/astobj2_hash.c 433444 > /branches/13/include/asterisk/vector.h 433444 > /branches/13/include/asterisk/linkedlists.h 433444 > /branches/13/include/asterisk/dlinkedlists.h 433444 > > Diff: https://reviewboard.asterisk.org/r/4550/diff/ > > > Testing > ------- > > > Thanks, > > Diederik de Groot > >
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev