aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2016-01-05 13:20:29 +0000
committerNick Clifton <nickc@gcc.gnu.org>2016-01-05 13:20:29 +0000
commita2faef8e068114f6e30f4c881f6f02b0b754c667 (patch)
tree8cc36f06a57a13be0f86e9ce4d334722e00185fb
parent3360dc9fc25128a3194bad65e94305944ff223d2 (diff)
downloadgcc-a2faef8e068114f6e30f4c881f6f02b0b754c667.zip
gcc-a2faef8e068114f6e30f4c881f6f02b0b754c667.tar.gz
gcc-a2faef8e068114f6e30f4c881f6f02b0b754c667.tar.bz2
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
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/ira-costs.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr68770.C95
4 files changed, 107 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c1f2cfc..83274e2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c
index fac9c90..ea5e8b1 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 e2a62e1..1bc843d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..33f0993
--- /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;
+}
+