#define UNSAFE_FN [[clang::unsafe_buffer_usage]]
#define UNSAFE_BUFFERS(...) \
_Pragma("clang unsafe_buffer_usage begin") \
__VA_ARGS__ \
_Pragma("clang unsafe_buffer_usage end")
#include "unsafe_buffers_not_clean_dir/clean_header.h"
#include "unsafe_buffers_not_clean_dir/not_clean_header.h"
#include "unsafe_buffers_not_clean_dir/still_not_clean_dir_1/not_clean_header.h"
#include "unsafe_buffers_not_clean_dir/still_not_clean_dir_2/not_clean_header.h"
DO_UNSAFE_THING_FROM_CHECKED_HEADER(UncheckedCpp, N, i, s);
DO_UNSAFE_THING_FROM_UNCHECKED_HEADER(UncheckedCpp, N, i, s);
inline int allowed_bad_stuff_in_cpp(int* i, unsigned s) {
auto x = [&]() { return i; };
return MACRO_CALL_FUNCTION_FROM_CHECKED_HEADER(x)[s] +
MACRO_CALL_FUNCTION_FROM_UNCHECKED_HEADER(x)[s] +
i[s];
}
int main() {
int i;
allowed_bad_stuff_in_cpp(&i, 1u);
auto a = UncheckStructThingTryToMakeScratchBufferUncheckedCpp();
auto b = CheckStructThingTryToMakeScratchBufferUncheckedCpp
();
}