Commit ebb077fc by Paolo Carlini Committed by Paolo Carlini

re PR c++/50391 ([C++0x] ICE on invalid code, pair with incomplete type)

/cp
2011-09-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50391
	* pt.c (regenerate_decl_from_template): Don't pass an error_mark_node
	to build_exception_variant.

/testsuite
2011-09-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50391
	* g++.dg/cpp0x/noexcept15.C: New.

From-SVN: r178857
parent 5699cf3d
2011-09-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50391
* pt.c (regenerate_decl_from_template): Don't pass an error_mark_node
to build_exception_variant.
2011-09-13 Dodji Seketeli <dodji@redhat.com>
PR c++/48320
......
......@@ -17729,7 +17729,7 @@ regenerate_decl_from_template (tree decl, tree tmpl)
specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
args, tf_error, NULL_TREE,
/*defer_ok*/false);
if (specs)
if (specs && specs != error_mark_node)
TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
specs);
......
2011-09-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50391
* g++.dg/cpp0x/noexcept15.C: New.
2011-09-14 Tom de Vries <tom@codesourcery.com>
PR middle-end/50251
......
// PR c++/50391
// { dg-options -std=c++0x }
#include <type_traits>
template<class Tp>
struct single
{
Tp elem; // { dg-error "incomplete type" }
constexpr single(const Tp& e)
: elem(e) { } // { dg-error "invalid field" }
single(single&& s) // { dg-error "not a member" }
noexcept(std::is_nothrow_move_constructible<Tp>::value)
: elem(s.elem) { } // { dg-error "invalid field|no member" }
};
template<class Tp>
constexpr single<typename std::decay<Tp>::type>
make_single(Tp&& x)
{
return single<typename std::decay<Tp>::type>(x);
}
class Blob; // { dg-error "forward declaration" }
void
foo(Blob *b)
{
make_single(*b);
}
// { dg-prune-output "include" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment