Hi Jeff,
PR target/68770 * ira-costs.c (copy_cost): Initialise the t_code field of the sri structure.
Can you please reduce the testcase from the BZ so that it can be included in the testsuite? I realize it might take a long time with multidelta because of the need to run the compiler with valgrind.
Actually I cheated - I initialised the unused field to 0xdeadbeef and then checked for this in default_secondary-reload(). That way it only took me 17 seconds in multidelta...
With a testcase, this is fine.
Thanks - committed. Testcase attached. Cheers Nick gcc/testsuite/ChangeLog 2016-01-05 Nick Clifton <ni...@redhat.com> PR target/68870 * g++.dg/pr68770.C: New test.
--- /dev/null 2016-01-05 08:31:00.212966083 +0000 +++ gcc/testsuite/g++.dg/pr68770.C 2016-01-05 12:39:59.945723750 +0000 @@ -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; +} +