From: Nick Clifton Date: Tue, 5 Jan 2016 13:20:29 +0000 (+0000) Subject: re PR target/68770 (Conditional jump or move depends on uninitialised value(s) defaul... X-Git-Tag: basepoints/gcc-7~1825 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2faef8e068114f6e30f4c881f6f02b0b754c667;p=thirdparty%2Fgcc.git re PR target/68770 (Conditional jump or move depends on uninitialised value(s) default_secondary_reload() targhooks.c:940) PR target/68770 * ira-costs.c (copy_cost): Initialise the t_icode field of the secondary_reload_info structure. tests: * g++.dg/pr68770.C: New test. From-SVN: r232072 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1f2cfc3be85..83274e261a4f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2016-01-05 Nick Clifton + PR target/68770 + * ira-costs.c (copy_cost): Initialise the t_icode field of the + secondary_reload_info structure. + PR target/66655 * config/i386/cygming.h (MAKE_DECL_ONE_ONLY): Define to use weak decls if weak support is available. diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index fac9c90b2cd3..ea5e8b1a0c33 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -442,6 +442,9 @@ copy_cost (rtx x, machine_mode mode, reg_class_t rclass, bool to_p, copy it. */ sri.prev_sri = prev_sri; sri.extra_cost = 0; + /* PR 68770: Secondary reload might examine the t_icode field. */ + sri.t_icode = CODE_FOR_nothing; + secondary_class = targetm.secondary_reload (to_p, x, rclass, mode, &sri); if (secondary_class != NO_REGS) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e2a62e15e937..1bc843dccd11 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-05 Nick Clifton + + PR target/68870 + * g++.dg/pr68770.C: New test. + 2016-01-04 Mike Stump * lib/target-supports.exp (check_effective_target_cilkplus): diff --git a/gcc/testsuite/g++.dg/pr68770.C b/gcc/testsuite/g++.dg/pr68770.C new file mode 100644 index 000000000000..33f0993f5466 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr68770.C @@ -0,0 +1,95 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* This test used to trigger the use of an uninitialised field (t_icode) + in the secondary_reload_info structure created in ira-costs.c:copy_cost(). + Unfortunately the test only generates a problem if run under valgrind... */ +typedef unsigned long int uint64_t; + +namespace __gnu_parallel +{ + enum _AlgorithmStrategy { heuristic, force_sequential, force_parallel }; + enum _SortAlgorithm { MWMS, QS, QS_BALANCED }; + enum _MultiwayMergeAlgorithm { LOSER_TREE }; + enum _PartialSumAlgorithm { RECURSIVE, LINEAR }; + enum _SplittingAlgorithm { SAMPLING, EXACT }; + enum _FindAlgorithm { GROWING_BLOCKS, CONSTANT_SIZE_BLOCKS, EQUAL_SPLIT }; + typedef uint64_t _SequenceIndex; + struct _Settings + { + _AlgorithmStrategy algorithm_strategy; + _SortAlgorithm sort_algorithm; + _PartialSumAlgorithm partial_sum_algorithm; + _MultiwayMergeAlgorithm multiway_merge_algorithm; + _FindAlgorithm find_algorithm; + _SplittingAlgorithm sort_splitting; + _SplittingAlgorithm merge_splitting; + _SplittingAlgorithm multiway_merge_splitting; + _SequenceIndex accumulate_minimal_n; + unsigned int adjacent_difference_minimal_n; + _SequenceIndex count_minimal_n; + _SequenceIndex fill_minimal_n; + double find_increasing_factor; + _SequenceIndex find_initial_block_size; + _SequenceIndex find_maximum_block_size; + _SequenceIndex find_sequential_search_size; + _SequenceIndex for_each_minimal_n; + _SequenceIndex generate_minimal_n; + _SequenceIndex max_element_minimal_n; + _SequenceIndex merge_minimal_n; + unsigned int merge_oversampling; + _SequenceIndex min_element_minimal_n; + _SequenceIndex multiway_merge_minimal_n; + int multiway_merge_minimal_k; + unsigned int multiway_merge_oversampling; + _SequenceIndex nth_element_minimal_n; + _SequenceIndex partition_chunk_size; + double partition_chunk_share; + _SequenceIndex partition_minimal_n; + _SequenceIndex partial_sort_minimal_n; + float partial_sum_dilation; + unsigned int partial_sum_minimal_n; + float find_scale_factor; + + explicit _Settings() : + algorithm_strategy(heuristic), + sort_algorithm(MWMS), + partial_sum_algorithm(LINEAR), + multiway_merge_algorithm(LOSER_TREE), + find_algorithm(CONSTANT_SIZE_BLOCKS), + sort_splitting(EXACT), + merge_splitting(EXACT), + multiway_merge_splitting(EXACT), + accumulate_minimal_n(1000), + adjacent_difference_minimal_n(1000), + count_minimal_n(1000), + fill_minimal_n(1000), + find_increasing_factor(2.0), + find_initial_block_size(256), + find_maximum_block_size(8192), + find_sequential_search_size(256), + for_each_minimal_n(1000), + generate_minimal_n(1000), + max_element_minimal_n(1000), + merge_minimal_n(1000), + merge_oversampling(10), + min_element_minimal_n(1000), + multiway_merge_minimal_n(1000), + multiway_merge_minimal_k(2), + multiway_merge_oversampling(10), + nth_element_minimal_n(1000), + partition_chunk_size(1000), + partition_chunk_share(0.0), + partition_minimal_n(1000), + partial_sort_minimal_n(1000), + partial_sum_dilation(1.0f), + partial_sum_minimal_n(1000), + find_scale_factor(0.01f) + { } + }; +} + +namespace +{ + __gnu_parallel::_Settings s; +} +