Commit 13f649f6 by Jason Merrill Committed by Jason Merrill

* constexpr.c: Tweak comments and formatting.

From-SVN: r218830
parent 43a39cdd
2014-12-17 Jason Merrill <jason@redhat.com>
* constexpr.c: Tweak comments and formatting.
2014-12-16 Paolo Carlini <paolo.carlini@oracle.com> 2014-12-16 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58650 PR c++/58650
......
/* Perform the semantic phase of constexpr parsing, i.e., the process of /* Perform -*- C++ -*- constant expression evaluation, including calls to
building tree structure, checking semantic consistency, and constexpr functions. These routines are used both during actual parsing
building RTL. These routines are used both during actual parsing
and during the instantiation of template functions. and during the instantiation of template functions.
Copyright (C) 1998-2014 Free Software Foundation, Inc. Copyright (C) 1998-2014 Free Software Foundation, Inc.
...@@ -866,11 +865,20 @@ struct constexpr_call_hasher : ggc_hasher<constexpr_call *> ...@@ -866,11 +865,20 @@ struct constexpr_call_hasher : ggc_hasher<constexpr_call *>
is a map of values of variables initialized within the expression. */ is a map of values of variables initialized within the expression. */
struct constexpr_ctx { struct constexpr_ctx {
/* The innermost call we're evaluating. */
constexpr_call *call; constexpr_call *call;
/* Values for any temporaries or local variables within the
constant-expression. */
hash_map<tree,tree> *values; hash_map<tree,tree> *values;
/* The CONSTRUCTOR we're currently building up for an aggregate
initializer. */
tree ctor; tree ctor;
/* The object we're building the CONSTRUCTOR for. */
tree object; tree object;
/* Whether we should error on a non-constant expression or fail quietly. */
bool quiet; bool quiet;
/* Whether we are strictly conforming to constant expression rules or
trying harder to get a constant value. */
bool strict; bool strict;
}; };
...@@ -3428,9 +3436,8 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant, ...@@ -3428,9 +3436,8 @@ cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
{ {
bool non_constant_p = false; bool non_constant_p = false;
bool overflow_p = false; bool overflow_p = false;
constexpr_ctx ctx = { NULL, NULL, NULL, NULL, allow_non_constant, strict };
hash_map<tree,tree> map; hash_map<tree,tree> map;
ctx.values = &map; constexpr_ctx ctx = { NULL, &map, NULL, NULL, allow_non_constant, strict };
tree type = initialized_type (t); tree type = initialized_type (t);
tree r = t; tree r = t;
if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type)) if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
...@@ -3537,9 +3544,8 @@ is_sub_constant_expr (tree t) ...@@ -3537,9 +3544,8 @@ is_sub_constant_expr (tree t)
{ {
bool non_constant_p = false; bool non_constant_p = false;
bool overflow_p = false; bool overflow_p = false;
constexpr_ctx ctx = { NULL, NULL, NULL, NULL, true, true };
hash_map <tree, tree> map; hash_map <tree, tree> map;
ctx.values = &map; constexpr_ctx ctx = { NULL, &map, NULL, NULL, true, true };
cxx_eval_constant_expression (&ctx, t, false, &non_constant_p, cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
&overflow_p); &overflow_p);
return !non_constant_p && !overflow_p; return !non_constant_p && !overflow_p;
......
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