mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/50972 ([C++0x] ICE on undeclared identifier)
PR c++/50972 * pt.c (maybe_instantiate_noexcept): Check the return value of push_tinst_level. From-SVN: r181240
This commit is contained in:
parent
59276295d6
commit
cb8010f922
|
@ -1,5 +1,9 @@
|
||||||
2011-11-09 Jason Merrill <jason@redhat.com>
|
2011-11-09 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
PR c++/50972
|
||||||
|
* pt.c (maybe_instantiate_noexcept): Check the return value of
|
||||||
|
push_tinst_level.
|
||||||
|
|
||||||
PR c++/51046
|
PR c++/51046
|
||||||
* parser.c (cp_parser_range_for): check_for_bare_parameter_packs.
|
* parser.c (cp_parser_range_for): check_for_bare_parameter_packs.
|
||||||
|
|
||||||
|
|
27
gcc/cp/pt.c
27
gcc/cp/pt.c
|
@ -18166,17 +18166,22 @@ maybe_instantiate_noexcept (tree fn)
|
||||||
|
|
||||||
if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
|
if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
|
||||||
{
|
{
|
||||||
push_tinst_level (fn);
|
if (push_tinst_level (fn))
|
||||||
push_access_scope (fn);
|
{
|
||||||
input_location = DECL_SOURCE_LOCATION (fn);
|
push_access_scope (fn);
|
||||||
noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
|
input_location = DECL_SOURCE_LOCATION (fn);
|
||||||
DEFERRED_NOEXCEPT_ARGS (noex),
|
noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
|
||||||
tf_warning_or_error, fn, /*function_p=*/false,
|
DEFERRED_NOEXCEPT_ARGS (noex),
|
||||||
/*integral_constant_expression_p=*/true);
|
tf_warning_or_error, fn,
|
||||||
pop_access_scope (fn);
|
/*function_p=*/false,
|
||||||
pop_tinst_level ();
|
/*integral_constant_expression_p=*/true);
|
||||||
spec = build_noexcept_spec (noex, tf_warning_or_error);
|
pop_access_scope (fn);
|
||||||
if (spec == error_mark_node)
|
pop_tinst_level ();
|
||||||
|
spec = build_noexcept_spec (noex, tf_warning_or_error);
|
||||||
|
if (spec == error_mark_node)
|
||||||
|
spec = noexcept_false_spec;
|
||||||
|
}
|
||||||
|
else
|
||||||
spec = noexcept_false_spec;
|
spec = noexcept_false_spec;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
2011-11-09 Jason Merrill <jason@redhat.com>
|
2011-11-09 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
PR c++/50972
|
||||||
|
* g++.dg/cpp0x/noexcept16.C: New.
|
||||||
|
|
||||||
PR c++/51046
|
PR c++/51046
|
||||||
* g++.dg/cpp0x/variadic119.C: New.
|
* g++.dg/cpp0x/variadic119.C: New.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
// PR c++/50972
|
||||||
|
// { dg-do compile { target c++11 } }
|
||||||
|
// Ignore all errors, we're just testing that this doesn't ICE
|
||||||
|
// { dg-prune-output "error" }
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
typedef long unsigned int size_t;
|
||||||
|
template<typename...>
|
||||||
|
struct __and_;
|
||||||
|
template<typename _Tp>
|
||||||
|
struct is_nothrow_move_constructible
|
||||||
|
{
|
||||||
|
};
|
||||||
|
template<typename _Tp>
|
||||||
|
struct is_nothrow_move_assignable
|
||||||
|
struct __add_rvalue_reference_helper<_Tp, true>
|
||||||
|
{ typedef _Tp&& type; };
|
||||||
|
template<typename _Tp>
|
||||||
|
struct add_rvalue_reference
|
||||||
|
: public __add_rvalue_reference_helper<_Tp>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
template<typename _Tp>
|
||||||
|
inline typename add_rvalue_reference<_Tp>::type
|
||||||
|
declval() noexcept
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
|
||||||
|
template<typename _Tp>
|
||||||
|
class new_allocator
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespace std __attribute__ ((__visibility__ ("default")))
|
||||||
|
class allocator: public __gnu_cxx::new_allocator<_Tp>
|
||||||
|
{
|
||||||
|
template<typename _Tp1>
|
||||||
|
struct rebind
|
||||||
|
{ typedef allocator<_Tp1> other; };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespace std __attribute__ ((__visibility__ ("default")))
|
||||||
|
template<typename _Alloc, typename _Tp>
|
||||||
|
struct __alloctr_rebind<_Alloc, _Tp, true>
|
||||||
|
{
|
||||||
|
typedef typename _Alloc::template rebind<_Tp>::other __type;
|
||||||
|
};
|
||||||
|
template<typename _Alloc>
|
||||||
|
struct allocator_traits
|
||||||
|
{
|
||||||
|
template<typename _Tp>
|
||||||
|
struct __rebind_alloc
|
||||||
|
{
|
||||||
|
typedef typename __alloctr_rebind<_Alloc, _Tp>::__type __type;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
|
||||||
|
template<typename _Alloc>
|
||||||
|
struct __alloc_traits
|
||||||
|
{
|
||||||
|
typedef std::allocator_traits<_Alloc> _Base_type;
|
||||||
|
static constexpr bool _S_nothrow_swap()
|
||||||
|
{
|
||||||
|
return !_S_propagate_on_swap()
|
||||||
|
|| noexcept(swap(std::declval<_Alloc&>(), std::declval<_Alloc&>()));
|
||||||
|
}
|
||||||
|
template<typename _Tp>
|
||||||
|
struct rebind
|
||||||
|
{ typedef typename _Base_type::template __rebind_alloc<_Tp>::__type other; };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespace std __attribute__ ((__visibility__ ("default")))
|
||||||
|
template<typename _Tp, typename _Alloc>
|
||||||
|
struct _Vector_base
|
||||||
|
{
|
||||||
|
typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
|
||||||
|
rebind<_Tp>::other _Tp_alloc_type;
|
||||||
|
};
|
||||||
|
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
|
||||||
|
class vector : protected _Vector_base<_Tp, _Alloc>
|
||||||
|
{
|
||||||
|
typedef _Vector_base<_Tp, _Alloc> _Base;
|
||||||
|
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
|
||||||
|
typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
|
||||||
|
swap(vector& __x)
|
||||||
|
noexcept(_Alloc_traits::_S_nothrow_swap());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
namespace lexertl
|
||||||
|
namespace detail
|
||||||
|
}
|
||||||
|
namespace detail
|
||||||
|
template<typename id_type>
|
||||||
|
struct basic_internals
|
||||||
|
{
|
||||||
|
typedef std::vector<id_type> id_type_vector;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
template<typename char_type, typename id_type = std::size_t>
|
||||||
|
class basic_state_machine
|
||||||
|
{
|
||||||
|
typedef detail::basic_internals<id_type> internals;
|
||||||
|
void minimise ()
|
||||||
|
{
|
||||||
|
minimise_dfa (dfa_alphabet_, *dfa_, size_);
|
||||||
|
}
|
||||||
|
typedef typename internals::id_type_vector id_type_vector;
|
||||||
|
void minimise_dfa (const id_type dfa_alphabet_,
|
||||||
|
id_type_vector &dfa_, std::size_t size_)
|
||||||
|
{
|
||||||
|
id_type_vector new_dfa_ (front_, front_ + dfa_alphabet_);
|
||||||
|
dfa_.swap (new_dfa_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
namespace std __attribute__ ((__visibility__ ("default")))
|
||||||
|
template<typename _Tp>
|
||||||
|
void
|
||||||
|
swap(_Tp&, _Tp&)
|
||||||
|
noexcept(__and_<is_nothrow_move_constructible<_Tp>,
|
||||||
|
is_nothrow_move_assignable<_Tp>>::value)
|
||||||
|
;
|
||||||
|
typedef lexertl::basic_state_machine<char32_t> lexstate;
|
||||||
|
lexstate m_state_machine;
|
||||||
|
GenerateLexer()
|
||||||
|
{
|
||||||
|
m_state_machine.minimise();
|
||||||
|
}
|
Loading…
Reference in New Issue