Add trivial destructor flags to the IR.

Actually we don't need this, but I had it written anyway...

At the very least, we can omit calls to the destructor if it's trivial, and have an empty Drop impl. At the *most*, we can omit the Drop impl entirely, but this would mean that adding a nontrivial destructor can trigger dropck in Rust code, and isn't super compatible -- we need to talk about this separately.

In order to walk source files that even *have* destructors defined in them, without crashing, we actually also need to check that the identifier for the function is representable before converting to an Identifier, so we do that also.

PiperOrigin-RevId: 400951408
diff --git a/rs_bindings_from_cc/ir.h b/rs_bindings_from_cc/ir.h
index 9654b39..848bc3c 100644
--- a/rs_bindings_from_cc/ir.h
+++ b/rs_bindings_from_cc/ir.h
@@ -242,6 +242,7 @@
   // Special member functions.
   SpecialMemberFunc copy_constructor = {};
   SpecialMemberFunc move_constructor = {};
+  SpecialMemberFunc destructor = {};
 
   // Whether this type is passed by value as if it were a trivial type (the same
   // as it would be if it were a struct in C).