Commit 941ae8b4 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/83958 (ICE: Segmentation fault (in find_decomp_class_base))

	PR c++/83958
	* decl.c (cp_finish_decomp): Diagnose if reference structure binding
	refers to incomplete type.

	* g++.dg/cpp1z/decomp35.C: New test.

From-SVN: r256984
parent a53d4f20
2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/83958
* decl.c (cp_finish_decomp): Diagnose if reference structure binding
refers to incomplete type.
2018-01-23 Nathan Sidwell <nathan@acm.org>
Deprecate ARM-era for scope handling
......
......@@ -7435,6 +7435,12 @@ cp_finish_decomp (tree decl, tree first, unsigned int count)
type = complete_type (TREE_TYPE (type));
if (type == error_mark_node)
goto error_out;
if (!COMPLETE_TYPE_P (type))
{
error_at (loc, "structured binding refers to incomplete type %qT",
type);
goto error_out;
}
}
tree eltype = NULL_TREE;
......
2018-01-23 Jakub Jelinek <jakub@redhat.com>
PR c++/83958
* g++.dg/cpp1z/decomp35.C: New test.
2018-01-23 Nathan Sidwell <nathan@acm.org>
* g++.dg/cpp0x/range-for10.C: Adjust.
......
// PR c++/83958
// { dg-do compile { target c++11 } }
// { dg-options "" }
template <typename = void> struct A;
class B;
template <typename, typename, typename = A<>> class C;
template <typename, typename> struct D;
template <typename T, typename U, typename V, typename, typename, typename W>
struct E {
using X = W;
X operator* ();
T operator++ ();
template <typename P, typename R, typename S, typename Q>
bool operator!= (E<P, U, V, R, S, Q>);
};
template <typename T, typename U, typename>
struct F {
class G;
using H = D<T, U>;
using I = E<G, T, U, G, H, H &>;
class G : public I {};
G begin ();
G end ();
};
template <typename T, typename U, typename V> struct C : F<T, U, V> {
using J = F<T, U, V>;
using J::begin;
using J::end;
};
using K = class L;
struct M {
void foo () { for (auto & [ a ] : m) {} } // { dg-error "incomplete type" }
C<K, B> m; // { dg-warning "only available with" "" { target c++14_down } .-1 }
};
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