Hi again, On 01/23/2012 11:32 AM, Jan Pokorný wrote: > Hm, I was talking about post-ops only, the example showed a failing pre-op > ...both is a single case as evaluate_preop boils down to evaluate_postop. > > I went through evaluate.c again and I think these cases should be somehow > unified (stating current state): > > 1. evaluate_postop: > a. function: error ("bad argument type for ++/--") > b. void*: nothing, but buggy evaluation (add/sub -1) that "buggy evaluation" is a kind of regression that can be tracked down to commit [1], which first started the "void != char" idea and which missed that evaluate_postop function. > 2. evaluate_ptr_add > a. function: warning ("arithmetics on pointers to functions") > b. void*: nothing, sizeof(void) implicitly considered as 1 > > 3. evaluate_sizeof: > a. function: warning ("expression using sizeof on a function") > b. void: warning ("expression using sizeof(void)") > (c. bool: warning ("expression using sizeof bool")) > > 4. evaluate_ptrsizeof: > - ? > > > The original patch makes 1b. an equivalent to 1a. The alternative > is to handle 1b. in a similar way as 2b. Maybe both would deserve > a warning. The most moderate alternative is to take what what used in evaluate_ptr_add into evaluate_postop. However, the question whether to follow assumptions that GCC makes emerges. I tried also clang -pedantic, I got: warning: arithmetic on a pointer to void is a GNU extension [-pedantic,-Wpointer-arith] > Still, there is at least one inconsistency: 1a. vs 2a. (error vs warning). [1] http://git.kernel.org/?p=devel/sparse/sparse.git;a=commit;h=405cd6e -- Jan -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html