(Anti-)Programmierwettbewerb



  • Wie weit vorn steh ich? :p 🙂
    Ich arbeite noch an einer anderen Methode.



  • Noch etwas für den GCC:

    int main() {
    decltype(static_cast<int(*)(int*)>(0) );
    }
    
    $ LANG="C" g++ ./main.cpp -omain -std=c++11
    ./main.cpp: In function 'int main()':
    ./main.cpp:2:37: internal compiler error: in cp_parser_abort_tentative_parse, at cp/parser.c:22878
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <https://bugs.archlinux.org/> for instructions.
    


  • gilt sowas auch?

    class c{
    public:
    	c(){
    		new c();
    	}
    };
    
    int main(){
    	new c();
    }
    


  • kellerkindanwärter schrieb:

    gilt sowas auch?

    class c{
    public:
    	c(){
    		new c();
    	}
    };
    
    int main(){
    	new c();
    }
    

    Kein Absturz (weder beim GCC noch be clang)



  • so vllt. 😞

    #include <stdio.h>
    
    class c{
    	public:
    	~c(){
    		this->~c();
    	}
    };
    
    int main(){
    	c x;
    }
    


  • kellerkindanwärter schrieb:

    so vllt. 😞

    Nö.



  • @kellerkindanwärter
    Du scheinst hier was falsch verstanden zu haben: es geht nicht darum dass das generierte Programm crasht, sondern darum dass der Compiler crasht. Und zwar richtig crasht -- also nicht ein kontrolliert Abbruch mit einer Fehlermeldung ala "das schachtelt mir zu tief".

    Das Sahnehäubchen wäre dann noch, wenn du das mit einem laut Standard gültigen Programm hinbekommst. Also etwas was laut Standard "well formed" ist, kein UB zur Folge hat etc.

    BTW: bei MSVC 6 war schon sowas in der Art ausreichend:

    class foo;
    class bar {};
    typedef bar foo;
    

    Wobei das leider kein Sahnehäubchen hat, und mit MSVC 6 Bugs lockt man auch keinen mehr hinterm Ofen vor.
    Sahnehäubchen-Bug, bzw. einen der auch moderne Compiler betrifft hab' ich keinen mehr in Erinnerung, sonst hätte ich schon gepostet.



  • Ist mein Bug ein "Sahnehäubchen-Bug" ? 🙂


  • Mod

    pyhax schrieb:

    Ist mein Bug ein "Sahnehäubchen-Bug" ? 🙂

    Der gefällt mir.

    Scheint sich um #51908 zu handeln, nur ohne variadic Templates.



  • pyhax schrieb:

    Ist mein Bug ein "Sahnehäubchen-Bug" ? 🙂

    Ich denke schon.
    Ist zwar komisch nur typ; zu schreiben, aber erlaubt isses (Deklaration die nix deklariert). Wird vermutlich mit decltype(...); nicht anders sein.
    (Wobei es vermutlich auch noch crasht wenn du nen Deklarator dazuschreibst.)


  • Mod

    hustbaer schrieb:

    aber erlaubt isses (Deklaration die nix deklariert).

    Ich bin ziemlich sicher, dass das nicht erlaubt ist. Es gibt ein paar Fälle, wo die Deklaration selbst keinen Bezeichner einführt, dann gehört dazu aber immer noch etwas anderes, das das tut (bei anonymen unions mindestens ein Member; und unbenannte Bitfelder sind immer Teil einer Klasse).



  • Was soll dieser Wettbewerb erreichen? 😕 Code zum Absturz eines Programmes kann jeder schreiben, nicht nur Anfänger. 🤡 Einen Code, der mit unterschiedlichen Compilern mal läuft und mal nicht, findet sich immer. Den Compiler absichtlich zum Absturz bringen? 😕 Ist auch sicher möglich, nur wozu? Die Frage hier erscheint mir wenig interessant zum weiteren Nachdenken. 😞

    Rufe den Pizzadienst. Sein Kassencomputer hat kein solches Problem! 😃



  • camper schrieb:

    hustbaer schrieb:

    aber erlaubt isses (Deklaration die nix deklariert).

    Ich bin ziemlich sicher, dass das nicht erlaubt ist. Es gibt ein paar Fälle, wo die Deklaration selbst keinen Bezeichner einführt, dann gehört dazu aber immer noch etwas anderes, das das tut (bei anonymen unions mindestens ein Member; und unbenannte Bitfelder sind immer Teil einer Klasse).

    Hm. OK 🙂
    Crasht der Code noch wenn man nen Deklarator dranschreibt? Wenn ja wäre ja alles in Butter.

    @berniebutt
    Ach weisste, es gibt immer Dinge die für manche interessant sind, und für andere total doof. Man muss aber nicht überall was dazuschreiben, wo man das doof findet.



  • Berniebutt. Eventuell sind solche Wettbewerbe interessant, weil sie austesten wie gut die Compikler, von denen unglaublich viel auf unseren Systemen abhängt, überhaupt getestet sind. Jeder gefundene Bug erhöht die Sicherheit.

    Aber bei dir habe ich eh den Eindruck, dass dich Informatik als Solche nicht sonderlich interessiert :).



  • hustbaer schrieb:

    camper schrieb:

    hustbaer schrieb:

    aber erlaubt isses (Deklaration die nix deklariert).

    Ich bin ziemlich sicher, dass das nicht erlaubt ist. Es gibt ein paar Fälle, wo die Deklaration selbst keinen Bezeichner einführt, dann gehört dazu aber immer noch etwas anderes, das das tut (bei anonymen unions mindestens ein Member; und unbenannte Bitfelder sind immer Teil einer Klasse).

    Hm. OK 🙂
    Crasht der Code noch wenn man nen Deklarator dranschreibt? Wenn ja wäre ja alles in Butter.

    Ja, der crasht noch. Aber es sollte doch kurz sein 😃 (Und ich hatte es auch erst mit Variadic templates, habe dann aber rausgefunden das es auch ohne geht. BTW: Wenn man als Funktionspointertype int(*)(int) nimmt, crasht es nicht. Ebenso wenn man den Cast durch einen C-style cast ersetzt, reinterpret_cast crasht aber :D)



  • otze schrieb:

    ... Eventuell sind solche Wettbewerbe interessant, weil sie austesten wie gut die Compikler, von denen unglaublich viel auf unseren Systemen abhängt, überhaupt getestet sind. Jeder gefundene Bug erhöht die Sicherheit ...

    Welche Sicherheit soll denn erhöht werden? Ihr sucht Möglichkeiten einen Compiler zum Abschmieren zu bringen. Wird schwer: der Compiler interpretiert nur Text und versucht nach vorgegebenen Regeln daraus ein ausführbares Programm zu machen. Weil Compiler auch programmiert sind können diese sicher nicht jeden Unsinn erkennen oder abfangen. Die Umsetzung zur exe gelingt oder gelingt nicht.

    Bitte zeigen, wie man schon den Compiler mit einem simplen Sourcecode zum Crash führt!



  • berniebutt schrieb:

    Weil Compiler auch programmiert sind können diese sicher nicht jeden Unsinn erkennen oder abfangen. Die Umsetzung zur exe gelingt oder gelingt nicht.

    Die Theorie des Compilerbaus ist sehr gut verstanden. Die Aussage, dass ein Compiler "nicht jeden Unsinn" erkennen kann, ist somit Quatsch. C++ kratzt an den Grenzen des derzeit praktisch machbaren ob der Komplexität des Standards und einen Compiler zum abschmieren zu bringen ist also sehr wohl interessant.

    Wenn man kein Interesse hat, einfach mal die Fresse halten.



  • berniebutt schrieb:

    Bitte zeigen, wie man schon den Compiler mit einem simplen Sourcecode zum Crash führt!

    Siehe mein Code. Oder Pyhax'.



  • @berniebutt

    Also hier extra für dich ein schönes Beispiel mit dem schönen (gerade noch) aktuellen MSVC 2010:

    http://stackoverflow.com/questions/9044061/lambda-function-does-not-compile-in-visual-studio-2010

    Bzw. google auch selber gerne nach MSVC C1001 oder C1001 ICE.



  • Ich habe die Antworten verstanden: Die Compilerbauer hinken der Komplexität theoretischer Anforderungen gelegentlich hinterher oder schaffen einiges einfach nicht so schnell, was sich theoriebessene Fuzzies ausdenken. Was heisst das nun für die Programmierung? Meine Antwort: Immer auf klare ausgereifte Standards setzen und nur bugfreie Dinge verwenden. War schon immer so!

    Wer sein eigenes Programm wegen eines Bugs im Compiler nicht zum laufen bringt ist arm dran und verdient mit seiner Arbeit kein Geld. Der Kunde will ein lauffähiges Programm und nur dafür zahlt er! 😮


Anmelden zum Antworten