LLVM C API Memory management

I am building bindings for LLVM in Racket, and was wondering how does memory management work for the C API. I'm guessing that when a module is disposed of all of the instructions and functions that were inside it are no longer valid, similarly with contexts and types. But what about when I delete a function, are all of the instructions that were inside it invalidated? What if a builder is still located at a basic block inside the function? What about when a global variable is removed, what happen to uses of it?

The reason that I want to know this is that the C style of blowing the world up when something goes wrong doesn't really work in higher level languages, and I want to catch programmer mistakes before that happens and through an exception.

Is there any documentation on this (besides the C++ source)?

-Eric