/// \mainpage flang
///
/// \section main_intro Introduction
/// Welcome to the flang project.
///
/// This documentation describes the **internal** software that makes
/// up flang, not the **external** use of flang. There are no instructions
/// here on how to use flang, only the APIs that make up the software. For
/// usage instructions, please see the [project website](https://github.com/llvm-project/flang)
/// for further detail.
///
/// \section main_caveat Caveat
/// This documentation is generated directly from the source code with doxygen.
/// Since flang is constantly under active development, what you're about to
/// read is out of date!
