[libc] Remove global constructors on File type
authorJoseph Huber <jhuber6@vols.utk.edu>
Wed, 19 Jul 2023 23:03:02 +0000 (18:03 -0500)
committerJoseph Huber <jhuber6@vols.utk.edu>
Thu, 20 Jul 2023 13:11:18 +0000 (08:11 -0500)
commitcc92212d75dff07644e478c55a6f145c020f6f8e
tree771acf198528123ec6f10a7ff8884c60120f61b6
parent60152f1983336e7098f0d28343cc0cf7c92af702
[libc] Remove global constructors on File type

The `File` interface currently has a destructor to delete the buffer if
it is owned by the file. This is problematic for the globally allocated
`stdout`, `stdin`, and `stderr` files. This causes the file interface to
have global constructors to initialize the destructors to use these.
However, these never use the destructors because they don't own the
buffer. This patch removes the destructor and calls in manually in the
close implementation. The platform close should never need to access the
buffer and it needs to be done before clearing the whole thing, so this
should work.

Reviewed By: sivachandra

Differential Revision: https://reviews.llvm.org/D155762
libc/src/__support/File/file.h