On 05/20/2016 01:18 PM, Daniel Gutson wrote:
(reposting in gcc@ and adding more information)

On Fri, May 20, 2016 at 3:43 PM, Andres Tiraboschi
<andres.tirabos...@tallertechnologies.com> wrote:
While analysing this bug we arrived to the following code at
tree.c:145 (lvalue_kind):

    case VAR_DECL:
      if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
      && DECL_LANG_SPECIFIC (ref)
      && DECL_IN_AGGR_P (ref))
    return clk_none;

That condition fails so a fall-through to the next case labels causes
to return clk_ordinary, whereas this is about a constexpr value
(rather than a reference).

As an experiment, we forced the condition above to return clk_none and
the bug is not reproduced.

We are suspecting either that the condition is too restrictive or a
fall-through is not intended. Why is the condition requiring
DECL_IN_AGGR_P?

Just to provide more information: DECL_LANG_SPECIFIC is NULL and
DECL_IN_AGGR_P is false.
Can somebody provide the rationale of the condition?
I'm not really an expert in this code, but it looks like we're returning clk_none for a small subset of nodes that aren't really lvalues. Examples would be certain read-only objects which can't be lvalues.

Other VAR_DECLs would be lvalues and should probably return clk_ordinary.

At least that how it appears to me.

Jeff

Reply via email to