> build3 currently does no special processing for the FIELD_DECL operand, > it just sets TREE_THIS_VOLATILE from operand zero for tcc_references. > > The C and C++ frontends have repeated patterns like > > ref = build3 (COMPONENT_REF, subtype, datum, subdatum, > NULL_TREE); > SET_EXPR_LOCATION (ref, loc); > if (TREE_READONLY (subdatum) > > || (use_datum_quals && TREE_READONLY (datum))) > > TREE_READONLY (ref) = 1; > if (TREE_THIS_VOLATILE (subdatum) > > || (use_datum_quals && TREE_THIS_VOLATILE (datum))) > > TREE_THIS_VOLATILE (ref) = 1;
Likewise in the Ada front-end (gigi). > Now - I wonder if there's a reason a frontend might _not_ want to > set TREE_THIS_VOLATILE on a COMPONENT_REF when the FIELD_DECL has > TREE_THIS_VOLATILE set. This would be weird semantics in my opinion. > I guess I'll do one more experiment and add verification that > TREE_THIS_VOLATILE on COMPONENT_REFs and FIELD_DECLs is consistent > and see where that trips. Sounds good to me. -- Eric Botcazou