--- /dev/null
+/* { 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;
+}
+