1// -Wall 2#pragma version(1) 3#pragma rs java_package_name(accum) 4 5// Several checks for bad accumulator DATA TYPE (not bad accumulator FUNCTION) 6 7///////////////////////////////////////////////////////////////////////////// 8// accumulator cannot be incomplete array 9///////////////////////////////////////////////////////////////////////////// 10 11typedef int IntA[]; // incomplete (unknown element count) 12 13#pragma rs reduce(redIntA) accumulator(AccumIntA) combiner(CombIntA) 14static void AccumIntA(IntA *accum, int val) { } 15static void CombIntA(IntA *accum, const IntA *val) { } 16 17// outconverter does not help 18#pragma rs reduce(redIntAOut) accumulator(AccumIntA) combiner(CombIntA) outconverter(OutIntA) 19static void OutIntA(int *out, const IntA *val) { } 20 21///////////////////////////////////////////////////////////////////////////// 22// accumulator cannot be incomplete struct 23///////////////////////////////////////////////////////////////////////////// 24 25struct Incomplete; 26 27#pragma rs reduce(redStructIncomplete) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete) 28static void AccumStructIncomplete(struct Incomplete *accum, int val) { } 29static void CombStructIncomplete(struct Incomplete *accum, const struct Incomplete *other) { } 30 31// outconverter does not help 32#pragma rs reduce(redStructIncompleteOut) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete) \ 33 outconverter(OutStructIncomplete) 34static void OutStructIncomplete(int *out, const struct Incomplete *val) { } 35 36///////////////////////////////////////////////////////////////////////////// 37// accumulator cannot be function 38///////////////////////////////////////////////////////////////////////////// 39 40typedef void Fn(void); 41 42#pragma rs reduce(redFn) accumulator(AccumFn) combiner(CombineFn) 43static void AccumFn(Fn *accum, int val) { } 44static void CombineFn(Fn *accum, const Fn *other) { } 45 46// outconverter does not help 47#pragma rs reduce(redFnOut) accumulator(AccumFn) combiner(CombineFn) outconverter(OutFn) 48static void OutFn(int *out, const Fn *val) { } 49 50///////////////////////////////////////////////////////////////////////////// 51// accumulator cannot be object 52///////////////////////////////////////////////////////////////////////////// 53 54#pragma rs reduce(redObj) accumulator(AccumObj) combiner(CombineObj) 55static void AccumObj(rs_element *accum, int val) { } 56static void CombineObj(rs_element *accum, const rs_element *other) { } 57 58// outconverter does not help 59#pragma rs reduce(redObjOut) accumulator(AccumObj) combiner(CombineObj) outconverter(OutObj) 60static void OutObj(int *out, const rs_element *val) { } 61 62