CodeQL documentation

Accidental rethrow

ID: cpp/rethrow-no-exception
Kind: problem
Severity: warning
Precision: high
Tags:
   - reliability
   - correctness
   - exceptions
Query suites:
   - cpp-security-and-quality.qls

Click to see the query in the CodeQL repository

The C++ throw expression can take several forms. One form throws a new exception, whereas the other re-throws the current exception. In the latter case, if there is no current exception, then the program will be terminated. Presence of a re-throw outside of an exception handling context is often caused by the programmer not knowing what kind of exception to throw.

Recommendation

The throw expression should be changed to throw a particular type of exception.

Example

void bad() {
  /* ... */
  if(error_condition)
    throw;
}

void good() {
  /* ... */
  if(error_condition)
    throw std::exception("Something went wrong.");
}

References