forked from boostorg/config
Added value-initialization checks for pointer-to-member.
[SVN r61942]
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// This test checks various forms of value-initialization:
|
// This test checks various forms of value-initialization:
|
||||||
// - doing member initialization inside a constructor
|
// - doing subobject initialization inside a constructor
|
||||||
// - creating a temporary object by T()
|
// - creating a temporary object by T()
|
||||||
// - creating a heap object by doing new T()
|
// - creating a heap object by doing new T()
|
||||||
// It checks various DefaultConstructible types, including fundamental types,
|
// It checks various DefaultConstructible types, including fundamental types,
|
||||||
@@ -138,6 +138,24 @@ namespace boost_no_complete_value_initialization
|
|||||||
return arg.data == 0;
|
return arg.data == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct int_pair_struct
|
||||||
|
{
|
||||||
|
int first;
|
||||||
|
int second;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef int int_pair_struct::*ptr_to_member_type;
|
||||||
|
|
||||||
|
struct ptr_to_member_struct
|
||||||
|
{
|
||||||
|
ptr_to_member_type data;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool is_value_initialized(const ptr_to_member_struct& arg)
|
||||||
|
{
|
||||||
|
return arg.data == 0;
|
||||||
|
}
|
||||||
|
|
||||||
// A struct, having an int. Equivalent to the struct TData, from CodeGear bug
|
// A struct, having an int. Equivalent to the struct TData, from CodeGear bug
|
||||||
// report 51854, "Value-initialization: POD struct should be zero-initialized",
|
// report 51854, "Value-initialization: POD struct should be zero-initialized",
|
||||||
// reported by me (Niels Dekker, LKEB) in 2007:
|
// reported by me (Niels Dekker, LKEB) in 2007:
|
||||||
@@ -432,7 +450,7 @@ namespace boost_no_complete_value_initialization
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// For built-in types and enumerated types.
|
// Tells whether an object of a scalar type T is value-initialized.
|
||||||
template <class T>
|
template <class T>
|
||||||
bool is_value_initialized(const T& arg)
|
bool is_value_initialized(const T& arg)
|
||||||
{
|
{
|
||||||
@@ -547,6 +565,10 @@ namespace boost_no_complete_value_initialization
|
|||||||
member_function_ptr_type m_member_function_ptr_array[2];
|
member_function_ptr_type m_member_function_ptr_array[2];
|
||||||
member_function_ptr_struct m_member_function_ptr_struct;
|
member_function_ptr_struct m_member_function_ptr_struct;
|
||||||
member_function_ptr_struct m_member_function_ptr_struct_array[2];
|
member_function_ptr_struct m_member_function_ptr_struct_array[2];
|
||||||
|
ptr_to_member_type m_ptr_to_member;
|
||||||
|
ptr_to_member_type m_ptr_to_member_array[2];
|
||||||
|
ptr_to_member_struct m_ptr_to_member_struct;
|
||||||
|
ptr_to_member_struct m_ptr_to_member_struct_array[2];
|
||||||
bit_field_struct m_bit_field_struct;
|
bit_field_struct m_bit_field_struct;
|
||||||
bit_field_struct m_bit_field_struct_array[2];
|
bit_field_struct m_bit_field_struct_array[2];
|
||||||
int_struct m_int_struct;
|
int_struct m_int_struct;
|
||||||
@@ -635,6 +657,10 @@ namespace boost_no_complete_value_initialization
|
|||||||
m_member_function_ptr_array(),
|
m_member_function_ptr_array(),
|
||||||
m_member_function_ptr_struct(),
|
m_member_function_ptr_struct(),
|
||||||
m_member_function_ptr_struct_array(),
|
m_member_function_ptr_struct_array(),
|
||||||
|
m_ptr_to_member(),
|
||||||
|
m_ptr_to_member_array(),
|
||||||
|
m_ptr_to_member_struct(),
|
||||||
|
m_ptr_to_member_struct_array(),
|
||||||
m_bit_field_struct(),
|
m_bit_field_struct(),
|
||||||
m_bit_field_struct_array(),
|
m_bit_field_struct_array(),
|
||||||
m_int_struct(),
|
m_int_struct(),
|
||||||
@@ -732,6 +758,12 @@ namespace boost_no_complete_value_initialization
|
|||||||
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct) +
|
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct_array[0]) +
|
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct_array[0]) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct_array[1]) +
|
FAILED_TO_VALUE_INITIALIZE(m_member_function_ptr_struct_array[1]) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member_array[0]) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member_array[1]) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member_struct) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member_struct_array[0]) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(m_ptr_to_member_struct_array[1]) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct) +
|
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct_array[0]) +
|
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct_array[0]) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct_array[1]) +
|
FAILED_TO_VALUE_INITIALIZE(m_bit_field_struct_array[1]) +
|
||||||
@@ -817,6 +849,8 @@ namespace boost_no_complete_value_initialization
|
|||||||
FAILED_TO_VALUE_INITIALIZE(function_ptr_struct()) +
|
FAILED_TO_VALUE_INITIALIZE(function_ptr_struct()) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(member_function_ptr_type()) +
|
FAILED_TO_VALUE_INITIALIZE(member_function_ptr_type()) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(member_function_ptr_struct()) +
|
FAILED_TO_VALUE_INITIALIZE(member_function_ptr_struct()) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(ptr_to_member_type()) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE(ptr_to_member_struct()) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(int_struct()) +
|
FAILED_TO_VALUE_INITIALIZE(int_struct()) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(int_struct_holder()) +
|
FAILED_TO_VALUE_INITIALIZE(int_struct_holder()) +
|
||||||
FAILED_TO_VALUE_INITIALIZE(pod_struct()) +
|
FAILED_TO_VALUE_INITIALIZE(pod_struct()) +
|
||||||
@@ -869,6 +903,8 @@ namespace boost_no_complete_value_initialization
|
|||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<function_ptr_struct>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<function_ptr_struct>() ) +
|
||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<member_function_ptr_type>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<member_function_ptr_type>() ) +
|
||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<member_function_ptr_struct>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<member_function_ptr_struct>() ) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<ptr_to_member_type>() ) +
|
||||||
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<ptr_to_member_struct>() ) +
|
||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<bit_field_struct>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<bit_field_struct>() ) +
|
||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<int_struct>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<int_struct>() ) +
|
||||||
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<int_struct>() ) +
|
FAILED_TO_VALUE_INITIALIZE( heap_object_wrapper<int_struct>() ) +
|
||||||
@@ -971,7 +1007,7 @@ namespace boost_no_complete_value_initialization
|
|||||||
<< num_failures_of_temporaries << '+'
|
<< num_failures_of_temporaries << '+'
|
||||||
<< num_failures_of_heap_objects << "): "
|
<< num_failures_of_heap_objects << "): "
|
||||||
<< total_num_failures
|
<< total_num_failures
|
||||||
<< "\nDetected by boost_no_complete_value_initialization::test() revision 25."
|
<< "\nDetected by boost_no_complete_value_initialization::test() revision 26."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
}
|
}
|
||||||
return static_cast<int>(total_num_failures);
|
return static_cast<int>(total_num_failures);
|
||||||
|
Reference in New Issue
Block a user