diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -21,6 +21,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator_range.h" @@ -1288,6 +1289,45 @@ return DB; } +inline const DiagnosticBuilder & +operator<<(const DiagnosticBuilder &DB, + const llvm::Optional &Opt) { + if (Opt) + DB << *Opt; + return DB; +}; + +inline const DiagnosticBuilder & +operator<<(const DiagnosticBuilder &DB, + const llvm::Optional> &Opt) { + if (Opt) + DB << *Opt; + return DB; +}; + +inline const DiagnosticBuilder & +operator<<(const DiagnosticBuilder &DB, + const llvm::Optional &Opt) { + if (Opt) + DB << *Opt; + return DB; +}; + +inline const DiagnosticBuilder & +operator<<(const DiagnosticBuilder &DB, const llvm::Optional &Opt) { + if (Opt) + DB << *Opt; + return DB; +}; + +inline const DiagnosticBuilder & +operator<<(const DiagnosticBuilder &DB, + const llvm::Optional> &Opt) { + if (Opt) + DB << *Opt; + return DB; +}; + /// A nullability kind paired with a bit indicating whether it used a /// context-sensitive keyword. using DiagNullabilityKind = std::pair;