You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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;
}
The text was updated successfully, but these errors were encountered:
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 clangds handling of cilk_reducer and may fix these spurious warnings as well.
The compiler incorrectly says static reducer callbacks used inside a template have not been emitted.
The text was updated successfully, but these errors were encountered: