C and C++


LANG.STRUCT.EXCP.CATCH : Use of catch

Summary

The code contains a catch expression.

Properties

Class Name Use of catch
Significance style
Mnemonic LANG.STRUCT.EXCP.CATCH
Categories
CWE CWE:396 Declaration of Catch for Generic Exception
CERT-CPP CERT-CPP:DCL57-CPP Do not let exceptions escape from destructors or deallocation functions
  CERT-CPP:ERR61-CPP Catch exceptions by lvalue reference
JSF++ JSF++:208 C++ exceptions shall not be used (i.e. throw, catch and try shall not be used.)
Availability Available for C++ only (not C).
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Use of catch"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <stdexcept>

int might_throw_something(int x);

int f_catch_stmt(int i){
  int j;
  try {
    j = might_throw_something(i);
  }
  catch (std::logic_error& e){       // 'Use of catch' warning issued here
    // handle std::logic_error
  }
  catch (std::exception& e){         // 'Use of catch' warning issued here
    // handle std::exception other than std::logic_error
  }
  catch (...){                       // 'Use of catch' warning issued here
    // handle all other types
  }
  // may do more computation for j
  // ...
  return j;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.