On 10/04/14 05:54, Zamyatin, Igor wrote:
Hi!
The following patch does fix random order for new decls generation during
Cilk_spawn generation.
As Jakub suggested in the PR first we deal with vectors, then sort them and
only then perform necessary generation of new decls.
Bootstrapped and regtested on trunk/4.9.
For trunk I couldn't check with COMPARE_DEBUG since building fails somewhere
else.
For 4.9 COMPARE_DEBUG building is ok.
Is it ok for trunk and backport into 4.9?
c-family/Changelog:
2014-10-03 Igor Zamyatin <igor.zamya...@intel.com>
PR c/63307
* cilk.c: Include vec.h.
(struct cilk_decls): New structure.
(wrapper_parm_cb): Split this function to...
(fill_decls_vec): ...this...
(create_parm_list): ...and this.
(compare_decls): New function.
(for_local_cb): Remove.
(wrapper_local_cb): Ditto.
(build_wrapper_type): For now first traverse and fill vector of
declarations then sort it and then deal with sorted vector.
(cilk_outline): Ditto.
(declare_one_free_variable): Ditto.
OK for the trunk. No sure if Jakub wants to backport to 4.9 or not.
That'd be his call.
+
+static int
+compare_decls (const void *a, const void *b)
+{
+ const struct cilk_decls* t1 = (const struct cilk_decls*) a;
+ const struct cilk_decls* t2 = (const struct cilk_decls*) b;
+
+ return DECL_UID (t1->key) > DECL_UID (t2->key);
We really prefer fully specified sorts. For a qsort callback, this
doesn't look fully specified.
With that fixed, this should be OK.
jeff