On 28/04/2014 13:41, Tobias Grosser wrote:
On 28/04/2014 13:08, Alp Toker wrote:

On 28/04/2014 11:11, Tobias Grosser wrote:


On 28/04/2014 11:16, Alp Toker wrote:
CXDiagnostic with value 5 is higher than CXDiagnostic_Error and there
are many applications using the outlined pattern that break following
the change, either by crashing or mis-categorising diagnostics as fatal
errors.

I see that the above categorizes the diagnostic as an error. This is
obviously incorrect. Nevertheless, it should just cause an error
message. I do not see how/why this would crash.

It hits an unreachable condition due to an unhandled case and crashes.

I consider this an application bug.

My quick look on ohloh did not find such usage. (Most results are
duplicates of clang code, but e.g. ycm does the right thing and just
maps to 'E' in case of unknown diagnostics). Obviously, there may still
be other applications.

I looked a little further. There are only seven projects on ohloh which actually look at the diagnostic level (all others just have a copy of clang somewhere). All seem to do something sensible (either map to an unknown diagnostic string, map it as an error or to a very high log level).

So the assumptions we are afraid of are to the very least not very widespread on ohloh.

Cheers,
Tobias

## QTCreator

    switch (severity)
    {
    case CXDiagnostic_Ignored:
        return QLatin1String("Ignored");
    case CXDiagnostic_Note:
        return QLatin1String("Note");
    case CXDiagnostic_Warning:
        return QLatin1String("Warning");
    case CXDiagnostic_Error:
        return QLatin1String("Error");
    case CXDiagnostic_Fatal:
        return QLatin1String("Fatal");
    default:
        return QLatin1String("<UNKNOWN>");

## YouCompleteMe

char DiagnosticSeverityToType( CXDiagnosticSeverity severity ) {
  switch ( severity ) {
    case CXDiagnostic_Ignored:
    case CXDiagnostic_Note:
      return 'I';

    case CXDiagnostic_Warning:
      return 'W';

    case CXDiagnostic_Error:
    case CXDiagnostic_Fatal:
      return 'E';

    default:
      return 'E';
  }

## go-clang

func (ds DiagnosticSeverity) String() string {
        switch ds {
        case Diagnostic_Ignored:
                return "Ignored"
        case Diagnostic_Note:
                return "Note"
        case Diagnostic_Warning:
                return "Warning"
        case Diagnostic_Error:
                return "Error"
        case Diagnostic_Fatal:
                return "Fatal"
        default:
                return "Invalid"
        }
}

## rust-bindgen

                if d.severity() >= CXDiagnostic_Error {
                    c_err = true;
                }

## bindgen.clay

         if (clang_getDiagnosticSeverity(diag) >= CXDiagnostic_Error)
            error? = true;

## oovcde

          if(sev >= CXDiagnostic_Error)
              errType = ET_CompileErrors;
          else
              errType = ET_CompileWarnings;

          }

## rtags

        int logLevel = INT_MAX;
const CXDiagnosticSeverity severity = clang_getDiagnosticSeverity(diagnostic);
        switch (severity) {
        case CXDiagnostic_Fatal:
        case CXDiagnostic_Error:
            logLevel = Error;
            break;
        case CXDiagnostic_Warning:
            logLevel = Warning;
            break;
        case CXDiagnostic_Note:
            logLevel = Debug;
            break;
        case CXDiagnostic_Ignored:
            break;
        }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to