diff options
author | Jason Merrill <jason@redhat.com> | 2013-05-09 12:43:36 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2013-05-09 12:43:36 -0400 |
commit | 0138d6b24ff942e4ccd54e52c0dc619d6911c452 (patch) | |
tree | 0ff2545c076f920080c2715f42b04536c9c75c62 /gcc/cp/tree.c | |
parent | a3409c0279cf6f6f230c5d163472686867e2f89d (diff) | |
download | gcc-0138d6b24ff942e4ccd54e52c0dc619d6911c452.zip gcc-0138d6b24ff942e4ccd54e52c0dc619d6911c452.tar.gz gcc-0138d6b24ff942e4ccd54e52c0dc619d6911c452.tar.bz2 |
N3639 C++1y VLA support
gcc/
* gimplify.c (gimplify_vla_decl): Don't touch an existing
DECL_VALUE_EXPR.
gcc/cp/
* decl.c (compute_array_index_type): Allow VLAs in C++1y mode.
(check_array_initializer): Allow VLA init.
(reshape_init_array_1): Adjust.
(cp_finish_decl): Check for invalid VLA length.
* typeck2.c (process_init_constructor_array): Adjust.
(store_init_value): Use build_vec_init for VLAs.
* semantics.c (add_capture): Capture VLA as ptr+len.
(vla_capture_type): New.
(build_capture_proxy): Rebuild the VLA.
* typeck.c (build_simple_component_ref): Split out from...
(build_ptrmemfunc_access_expr): ...here.
* tree.c (array_of_runtime_bound_p): New.
* init.c (throw_bad_array_length): New.
(build_vec_init): Use it.
* parser.c (cp_convert_range_for): When iterating over a VLA,
use it directly rather than bind a reference.
* cp-tree.h: Declare new functions.
libstdc++-v3/
* libsupc++/new: Add std::bad_array_length.
* libsupc++/bad_array_length.cc: New.
* libsupc++/eh_aux_runtime.cc: Add __cxa_bad_array_length.
* libsupc++/Makefile.in: Build them.
* config/abi/pre/gnu.ver: Add new symbols.
* config/abi/pre/gnu-versioned-namespace.ver: Add new symbols.
From-SVN: r198745
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r-- | gcc/cp/tree.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 5117319..2df2087 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -871,6 +871,21 @@ build_array_of_n_type (tree elt, int n) return build_cplus_array_type (elt, build_index_type (size_int (n - 1))); } +/* True iff T is a C++1y array of runtime bound (VLA). */ + +bool +array_of_runtime_bound_p (tree t) +{ + if (!t || TREE_CODE (t) != ARRAY_TYPE) + return false; + tree dom = TYPE_DOMAIN (t); + if (!dom) + return false; + tree max = TYPE_MAX_VALUE (dom); + return (!value_dependent_expression_p (max) + && !TREE_CONSTANT (max)); +} + /* Return a reference type node referring to TO_TYPE. If RVAL is true, return an rvalue reference type, otherwise return an lvalue reference type. If a type node exists, reuse it, otherwise create |