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;
+}
+

Reply via email to