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
This commit is contained in:
Nick Clifton 2016-01-05 13:20:29 +00:00 committed by Nick Clifton
parent 3360dc9fc2
commit a2faef8e06
4 changed files with 107 additions and 0 deletions

View 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.

View 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)

View 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):

View File

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