]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/68770 (Conditional jump or move depends on uninitialised value(s) defaul...
authorNick Clifton <nickc@redhat.com>
Tue, 5 Jan 2016 13:20:29 +0000 (13:20 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Tue, 5 Jan 2016 13:20:29 +0000 (13:20 +0000)
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

gcc/ChangeLog
gcc/ira-costs.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr68770.C [new file with mode: 0644]

index c1f2cfc3be858f7c60fdbfda630d4a867a66916a..83274e261a4f9a3f42d9109a9c66187f661bcccf 100644 (file)
@@ -1,5 +1,9 @@
 2016-01-05  Nick Clifton  <nickc@redhat.com>
 
+       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.
index fac9c90b2cd3358b9db4021db5cd00e4eebe9912..ea5e8b1a0c339b9f64304c10ba5a709a5e8aee39 100644 (file)
@@ -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)
index e2a62e15e9370e4be5466a919c4c4ffee9c766e2..1bc843dccd11e99603e03c0c2a3e90f5634676cf 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-05  Nick Clifton  <nickc@redhat.com>
+
+       PR target/68870
+       * g++.dg/pr68770.C: New test.
+
 2016-01-04  Mike Stump  <mikestump@comcast.net>
 
        * 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 (file)
index 0000000..33f0993
--- /dev/null
@@ -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;
+}
+