88
99#include " BitcodeReader.h"
1010#include " llvm/Support/Error.h"
11+ #include " llvm/Support/ErrorHandling.h"
1112#include " llvm/Support/TimeProfiler.h"
1213#include " llvm/Support/raw_ostream.h"
1314#include < optional>
1415
1516namespace clang {
1617namespace doc {
1718
19+ static llvm::ExitOnError ExitOnErr (" clang-doc error: " );
20+
1821using Record = llvm::SmallVector<uint64_t , 1024 >;
1922
2023// This implements decode for SmallString.
@@ -716,8 +719,8 @@ llvm::Error addReference(FriendInfo *Friend, Reference &&R, FieldId F) {
716719
717720template <typename T, typename ChildInfoType>
718721static void addChild (T I, ChildInfoType &&R) {
719- llvm::errs () << " invalid child type for info " ;
720- exit ( 1 );
722+ ExitOnErr ( llvm::createStringError ( llvm::inconvertibleErrorCode (),
723+ " invalid child type for info " ) );
721724}
722725
723726// Namespace children:
@@ -766,8 +769,9 @@ template <> void addChild(BaseRecordInfo *I, FunctionInfo &&R) {
766769// parameters) or TemplateSpecializationInfo (for the specialization's
767770// parameters).
768771template <typename T> static void addTemplateParam (T I, TemplateParamInfo &&P) {
769- llvm::errs () << " invalid container for template parameter" ;
770- exit (1 );
772+ ExitOnErr (
773+ llvm::createStringError (llvm::inconvertibleErrorCode (),
774+ " invalid container for template parameter" ));
771775}
772776template <> void addTemplateParam (TemplateInfo *I, TemplateParamInfo &&P) {
773777 I->Params .emplace_back (std::move (P));
@@ -779,8 +783,8 @@ void addTemplateParam(TemplateSpecializationInfo *I, TemplateParamInfo &&P) {
779783
780784// Template info. These apply to either records or functions.
781785template <typename T> static void addTemplate (T I, TemplateInfo &&P) {
782- llvm::errs () << " invalid container for template info " ;
783- exit ( 1 );
786+ ExitOnErr ( llvm::createStringError ( llvm::inconvertibleErrorCode (),
787+ " invalid container for template info " ) );
784788}
785789template <> void addTemplate (RecordInfo *I, TemplateInfo &&P) {
786790 I->Template .emplace (std::move (P));
@@ -798,8 +802,9 @@ template <> void addTemplate(FriendInfo *I, TemplateInfo &&P) {
798802// Template specializations go only into template records.
799803template <typename T>
800804static void addTemplateSpecialization (T I, TemplateSpecializationInfo &&TSI) {
801- llvm::errs () << " invalid container for template specialization info" ;
802- exit (1 );
805+ ExitOnErr (llvm::createStringError (
806+ llvm::inconvertibleErrorCode (),
807+ " invalid container for template specialization info" ));
803808}
804809template <>
805810void addTemplateSpecialization (TemplateInfo *I,
@@ -808,8 +813,8 @@ void addTemplateSpecialization(TemplateInfo *I,
808813}
809814
810815template <typename T> static void addConstraint (T I, ConstraintInfo &&C) {
811- llvm::errs () << " invalid container for constraint info " ;
812- exit ( 1 );
816+ ExitOnErr ( llvm::createStringError ( llvm::inconvertibleErrorCode (),
817+ " invalid container for constraint info " ) );
813818}
814819template <> void addConstraint (TemplateInfo *I, ConstraintInfo &&C) {
815820 I->Constraints .emplace_back (std::move (C));
0 commit comments