On 11/04/14 09:12, David Malcolm wrote:
So give the complexities in interfacing with the guts of GCC, would it
make sense to expose the validate method?

Most of the error-checking in the API happens in the API calls in
libgccjit.c, testing that the individual pieces are sane.

The validate method tests the things that can only be verified "as a
whole", when the context is about to be compiled: are there unreachable
blocks?  is every block terminated?  etc

I can't quite see why client code might want to perform the latter kind
of validation without actually doing a compile, so I don't plan to
expose this at this time.  It's trivial to do so if someone needs it.
Yea, I saw all the border checking -- I was thinking mostly about things that require larger context. In particular I was thinking block contents, the cfg and such.

Thinking about how I tend to work and might use this, I'd be likely to start building up statements/blocks and want to verify them without going all the way through compilation. But that may be an artifact of living in a world where we have many points (between each pass) where a verification step for key data structures is useful.

I certainly don't see it as a blocking issue, just wanted to raise the possibility that exposing the verification step in the ABI might be useful. If you don't want to do that right now, I can live with it.


I think I was trying to avoid std::string for some reason, but I'm not
quite sure why, perhaps out of a misremembered idea that libstdc++ was
verboten (I currently use std:: in one place, in jit-playback.h, where a
playback::context has a:
   vec<std::pair<tree, location *> > m_cached_locations;
).
I can't see any reason why we wouldn't use basic capabilities of the C++ runtime system. To use an example we both know and understand, switching EXPR_LIST to a forward_list would be something I would look favorably upon simply because everyone doing C++ knows what a forward_list is, it's proprties, strenghts & weaknesses. Only GCC junkies happen to know that EXPR_LIST is just a hand-rolled forward list :-)



In any case recording::string is an implementation detail hidden within
the library.  It is a recording::memento and hence has the same lifetime
as the recording::context.  I can't think of a reason off the top of my
head why a std::string wouldn't work instead, but the existing code
works, and has been through a fair amount of debugging.
How about as a follow-up? I don't see this as being big enough to warrant blocking the work.

jeff

Reply via email to