> Sorry for picking on simple stuff, but the switch name seems
No problem, and thanks for your feedback.
> meaningless, and there isn't any documentation.
Ah. I'm open for suggestion on a better name, or I can come up with a
new one.
I'll indeed add documentation as soon as there's some kind of agreement on
the approach.
> Conceptually it looks like you are trying to make up for the absence
> of a proper AST by building an on-the-side hash table to track
> expression locations.
Right, that's the idea.
> The hash table key is the tree structure
> itself.
Yes.
> The thing is, any call into fold-const may give you an
> entirely new tree,
Exactly.
> and at that point you have lost your extra location
> information.
Actually no, see the c-family/c-common.c patch, copied here, which
ensures that folding does preserve such information:
* c-common.c (c_fully_fold_internal): Copy extra locations on new node.
--- c-family/c-common.c (revision 190939)
+++ c-family/c-common.c (working copy)
@@ -1440,7 +1440,10 @@ c_fully_fold_internal (tree expr, bool i
TREE_NO_WARNING (ret) = 1;
}
if (ret != expr)
- protected_set_expr_location (ret, loc);
+ {
+ protected_set_expr_location (ret, loc);
+ duplicate_expr_locations (ret, expr);
+ }
return ret;
}
> And the C/C++ frontends call into fold-const regularly,
> which is why we don't have a proper AST in the first place. So it
> seems to me that this is going to be kind of frustrating, in that we
> will often have the extra location information but sometimes we won't.
That's not the case as per the c-common.c patch, the locations are preserved
across fold, otherwise as you said, the whole approach would be pretty useless.
I should perhaps have mentioned that this patch (and the -fdump-xref
implementation on top of it) has been in production in our (AdaCore) tree for
more than 2 years now, with pretty good results, and certainly most expressions
trees do have extra sloc info available in our experience.
> And whether we have it or not will change as the frontends change.
See above.
Does this address your concern?
Arno