Wie man Coverity static analysis kompatibel mit C++0x-standard?

Ich bin mit Wind River Compiler 4 (gcc (C) und g++ (C++)) und es beinhaltet alle meine Projekte ohne Probleme. Nun, ich habe mit Coverity Static Analysis, check my code. Ich habe konfiguriert, die bestimmten Compiler. Für den C-Code (gcc) gibt es keine Probleme und ich kann die Analyse, aber für den C++-Code (g++) ich habe eine Menge von Fehlern:

.../c++config.h", line 214: error #40:
    expected an identifier
inline namespace __gnu_cxx_ldbl128 { }
       ^

.../c++config.h", line 214: error #326:
    inline specifier allowed on function declarations only
inline namespace __gnu_cxx_ldbl128 { }
^

.../c++config.h", line 214: error #65:
    expected a ";"
inline namespace __gnu_cxx_ldbl128 { }
                                   ^
.../include/string.h", line 76: error #312:
    cannot overload functions distinguished by return type alone
extern __const void *memchr (__const void *__s, int __c, size_t __n)
                     ^

.../include/string.h", line 116: error #312:
    cannot overload functions distinguished by return type alone
extern "C++" __const void *memchr (__const void *__s, int __c, size_t __n)
                     ^

Es scheinen einige C++11-spezifische features wie die inline-namespace, der code aber nicht verwenden diese Funktionen. Die Fehler oben sind produziert mit einem HelloWorld-Code:

#include "stdio.h"
#include "util.h"
#include <string>
#include "string.h"

using namespace std;

int main()
{
    printf("Hello World, C++ version: %d.%d.%d\r\n",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);

    return 0;
}

Ich habe versucht, den c++ - standard mit dem g++ die option

-std=c++98

aber das Ergebnis nicht geändert.

Den Test-Code ist in einer großen build-Hierarchie, sondern die Schritte, die für Coverity sind wie diese:

  1. Ziel-und env-set (Wind-River-4 Linux)
  2. sauber machen
  3. cov-Konfiguration mit dem compiler dir und geben
  4. cov-bauen mit dem richtigen "make all" Befehl, das funktioniert allein
  5. cov-analysieren
  6. if (no_error) cov-commit-Mängel

Habe ich auch so konfiguriert, Coverity, um zu ersetzen Sie alle "inline namespace" mit "namespace" während der cov-build (--ppp-translator replace/inline namespace/namespace). Die inline-Fehler verschwunden, aber es produziert mehr von diesem überlast Fehler und keine succecfully bauen. Auch versucht zu entfernen, die "C++" in der gleichen Weise, aber hat nicht funktioniert es werden immer mehr Fehler.

Hat jemand eine Idee, was hier das problem? Und wie bekomme ich die Coverity build ohne Fehler? Vielleicht kann ich konfigurieren Coverity ignorieren c++ - standard-Header, aber ich weiß nicht wie?

  • Welche version von gcc verwenden Sie? 4 ist nicht spezifisch genug. Trotzdem sollten Sie einen Fall öffnen, mit [email protected] - senden Sie Ihre build-log und die vorprozessierten source-und Sie werden in der Lage sein, Ihnen zu sagen, was Sie brauchen, um hinzuzufügen, um Ihre Konfiguration zu ermöglichen cov-Strahlen, um erfolgreich zu verarbeiten.
  • Das Programm "WindRiver" Env. ist WR-Linux-4.0/Toolchain-4.4-291 und der gcc, der verwendet wird, scheint die version 4.4.1. Das ist die version von der include-dir der gcc während des build-Skripts. Ich bin jetzt auch in Kontakt mit dem support: Das problem ist, dass vor allem WindRiver-Compiler nicht unterstützt, unter Linux, aber fast alle gcc-compiler. Sie haben nun die vorprozessierten source und untersuchen es. Auch die WindRiver-Unterstützung ist nun beteiligt.
  • Habe Antwort von Coverity Unterstützen, und wir werden nun versuchen, um dieses Problem zu umgehen.
  • Coverity bietet jetzt ein vorkonfiguriertes bundle, vor allem für die WindRiver-Umgebungen. Siehe: windriver.com/announces/coverity-static-analysis
InformationsquelleAutor Indimental | 2012-01-19
Schreibe einen Kommentar