opencilk-project
opencilk-project copied to clipboard
Reducer callbacks trigger spurious -Wunneeded-internal-declaration warnings
The compiler incorrectly says static reducer callbacks used inside a template have not been emitted.
/* Unwanted warnings:
unused.cpp:9:13: warning: function 'identity_64' is not needed and will not be emitted [-Wunneeded-internal-declaration]
unused.cpp:13:13: warning: function 'sum_64' is not needed and will not be emitted [-Wunneeded-internal-declaration]
*/
#include <cilk/cilk.h>
static void identity_64(void *p) { *(long *)p = 0; }
static void sum_64(void *l, void *r) { *(long *)l += *(long *)r; }
template <class T>
T sum_cilk(){
long cilk_reducer(identity_64, sum_64) sum = 0;
return sum;
}
long f() {
long total = sum_cilk<long>();
return total;
}
It seems like this issue might be related to another issue that tools, such as clangd
, don't handle the cilk_reducer
keyword properly. Tthe problem stems from the fact that the cilk_reducer
keyword and its arguments aren't really represented in the AST. Because most of clangd
's functionality relies on the AST, this means that clangd
fails to recognize the cilk_reducer
keyword and its arguments. As a result, functions in modern IDEs, like VSCode, that use clangd
don't work correctly with cilk_reducer
.
It would be better to add a proper representation of cilk_reducer
types to the AST, possibly based on how templated C++ types are represented in the AST. Such a change should fix clangd
s handling of cilk_reducer
and may fix these spurious warnings as well.