PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compiler-Tests?



nobody0
11-10-2003, 16:43
Weil ich mit einem propietären teuren C-Compiler arbeiten muss, der einige Bugs wie falsche Berechnung von Bitfeld-Größen, kein printf mit %hu u. %u, kein sscanf von %3s, fehlerhaftes longjmp usw. hat (wobei es nicht einmal warnings gibt) und NICHT einmal kritisches wie if(a=b) oder a = b << c + d; oder sinnloses/offensichtlich falsches wie {a == b} meldet, suche ich Compiler-Tests, die solche Bugs melden.

Gibt es irgendwo passende Tests dafür, oder muss man sowas selber schreiben?
Optimal wäre natürlich ein Test, der möglichst alles mal kurz testet, was nach ANSI-C funktionieren sollte/könnte.

RapidMax
11-10-2003, 16:54
Das ist übel. Damit kannst du IMHO keine vertrauenswürdige Software schreiben.

Kannst du nicht mit gcc Cross-Compilate für die entsprechende Plattform erzeugen?

Ich nehme an, dass du dein Programm nicht einfach mit dem gcc auf dem PC übersetzen und ausführen kannst, da es speziellen Funktionen (z.B. Hardware) des Zielsystem benötigt. Wenn das funktionieren würde, könntest du Debuggin-Ausgaben einfügen und die Ausgaben auf dem Zielhost mit denen auf dem PC vergleichen.

Ohne das musst du alle kritischen Berechnungen in eine Testprogramm einfügen, dass du auf beien Plattformen übersetzten kannst. Damit kannst du zumindest die Fehler entdecken, die hier inbegriffen sind.

Als Kompilertest könntest du ja mal versuchen den gcc mit dem buggy Compiler zu übersetzen ;)

Gruss, Andy

peschmae
11-10-2003, 17:18
ich glaube GCC hat eine Testsuite mit dabei. Keine Ahnung was die alles testet/testen kann

MfG Peschmä

nobody0
11-10-2003, 18:49
Danke für die Antworten.
Inzwischen habe ich die gcc-testsuite gefunden, aber das ist nur eine Annsammlung einzelner Tests, die ich für den Microcontroller (MSP430) anpassen müsste, denn stdin u. stdout gibt es da nicht.

Deshalb suche ich erstmal ganz grundlegende Tests, die testen ob a) die verwendeten Funktionen zumindest bekannt sind und b) nötige Fehlermeldungen z. B. bei { a == b; } auch wirklich ausgegeben werden.
Unabhängig von der Zielplattform u. der Ausführung kann man damit schonmal einen ersten Test vornehmen, der die Ausgaben über die Compiler-Ausgaben realisiert.
Wie ich hörte, bestehen nämlich nicht nur die Compiler von IAR sondern auch die von KEIL solche Tests nicht.

Deshalb habe ich mal angefangen mit diesem minimalen Test-Programm:


// Minimal compiler test for C compiler.
//
// The compiler MUST produce the warnings like these in the comments
// below if he should be used for programming more than hello world programs,
// because humans do produce often such semantik errors!

void
main (void)
{
int a, b, c, d, e, f, g, h;

if (a = b) // warning: suggest parentheses around assignment used as
c = d << e + f; // warning: suggest parentheses around + or - inside shift
g == h; // warning: statement with no effect
}


Ob der Code dann wirklich korrekt ausgeführt wird, müsste mit Ausgabe in ein Log-File in eine Speicherkarte o. ä. realisiert werden, aber so wie es aussieht, kommen nur gcc-Varianten wie MCPGCC in Frage.

Also momentan müssen einige Projekte mit dem Compiler beendet bzw. vorläufig weitergeführt werden, so dass da workarounds nötig sind.
Deshalb habe ich mal versucht den splint zu benutzen, aber die Include-Files konnte ich ihm nur mit Links vermitteln und bekomme dan nur Fehler wie

Parse Error:
Inconsistent function declaration: sfrb :

Hat da irgendjemand eine Lösung? :confused:

Ein anderer Semantik-Checker, der zumindest die obigen 3 Fehler in dem Programm finden würde, wäre auch erstmal ausreichend. Welche Semantik-Checker außer splint gibt es denn dafür? :confused:

Edit: Wie gesagt besteht der gcc diesen Test und der ICC430 vom IAR Embedded
Workbench 1.26A Vollversion (mit Dongle) versagt auch bei allen
aktivierten Warnungen/Fehlermeldungen völlig!