VS 11: Compiler-Crash bei illegalem range-based-for



  • Hallo!
    Ich habe gerade einen Bug im VS-11 Compiler "gefunden", der zum Crash desselben führt und extrem(!) einfach zu triggern ist. Komplettes Beispiel:

    int main() { for (int element : 42); }
    

    Ausgabe:

    Interner Compilerfehler in C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\cl.exe. Sie werden aufgefordert, später einen Fehlerbericht an Microsoft zu senden.
    

    Bzw. in der IDE:

    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(347,5): error MSB6006: "CL.exe" wurde mit dem Code 1 beendet.
    

    Anscheinend crasht VS bei allem, was den Anforderungen (afaik freie begin() und end() Funktionen für den Container) der range-based for-loop nicht genügt. Bei mir entstand das beim Ersatz eines BOOST_FOREACH, das über std::pair<Iterator, Iterator> iterierte.

    Ist das ein Konfigurationsfehler bei mir, habe ich einen Thread übersehen, oder ist das wirklich noch keinem aufgefallen?



  • Bei mir crasht da garnichts:

    1>main.cpp(27): error C3312: no callable 'begin' function found for type 'int'
    1>main.cpp(27): error C3312: no callable 'end' function found for type 'int'



  • Du kannst das Beispiel noch verkürzen, wenn du den Identifier weglässt.

    Ich kann (mal wieder 🙄) nicht glauben, dass etwas so primitives VC schon zum crashen zwingt.
    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?



  • Vielleicht liegt es auch an meiner deutschen Lokalisierung? Ich habe da schon Dinge gehört... Oder der Fehler tritt nur bei der Express-Edition auf.

    EDIT: Wär super wenn das noch jemand mit der genannten Konfiguration (Deutsch, Express) testen könnte. 🙂



  • Sone schrieb:

    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?

    Ja.



  • Sone schrieb:

    Ich kann (mal wieder 🙄) nicht glauben, dass etwas so primitives VC schon zum crashen zwingt.
    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?

    Unter welchem System, mit welcher IDE und mit welchem Compiler arbeitest du eigentlich, Sone?



  • Ich habe es beim Visual Studio Professional 2012 sowohl mit deutscher als auch englischer Spracheinstellung ausprobiert, und siehe da - es hat mit der Sprache zu tun.

    Deutsche Spacheinstellung:

    1 error MSB6006: "CL.exe" wurde mit dem Code 2 beendet...
    2 IntelliSense: diese bereichsbasierte 'for'-Anweisung erfordert eine geeignete "begin"-Funktion, die jedoch nicht gefunden wurde...

    Englische Spracheinstellung:

    1 error C3312: no callable 'begin' function found for type 'int'...
    2 error C3312: no callable 'end' function found for type 'int'...
    3 IntelliSense: this range-based 'for' statement requires a suitable "begin" function and none was found...

    Wie gut das man inzwischen einfach zwischen den Spracheinstellungen wechseln kann (habe Deutsch und Englisch installiert, wechsel erfordert einen Neustart von VS).

    @Sone: Wie wäre es wenn du mal langsam erwachsen wirst.



  • Wahrscheinlich greift er auf eine Lokalisation zu, die nicht da ist. Ihn bringt das Konstrukt selbst nicht aus dem Tritt.



  • out schrieb:

    Sone schrieb:

    Ich kann (mal wieder 🙄) nicht glauben, dass etwas so primitives VC schon zum crashen zwingt.
    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?

    Unter welchem System, mit welcher IDE und mit welchem Compiler arbeitest du eigentlich, Sone?

    Wieso interessiert dich das?
    Linux/Windows, Codeblocks, GCC.



  • Sone schrieb:

    Linux/Windows, Codeblocks, GCC.

    Noch mal für Dich zum Mitschreiben: Nicht jeder kann sich seinen Compiler einfach so aussuchen. Manche Leute programmieren nicht nur zum Spaß, sondern arbeiten in Firmen. Da soll es dann vorkommen, dass Toolbaselines festgelegt wurden, damit dem nächsten Kunden nicht seine 30Mio € Anlage um die Ohren fliegt, weil durch die wilden Compilerwechsel "wider Erwarten" irgendetwas nicht mehr funcktioniert.



  • Tachyon schrieb:

    Sone schrieb:

    Linux/Windows, Codeblocks, GCC.

    Noch mal für Dich zum Mitschreiben: Nicht jeder kann sich seinen Compiler einfach so aussuchen...

    ...und selbst wenn, können sich Geschmäcker (z.B. was die IDE angeht) unterscheiden, oder noch andere Gründe (z.B. eine IDE die mehrere verwendete Sprachen sinnvoll unterstützt, oder man sprezielle Erweiterungen nutzt) für einen bestimmten Compiler und eine IDE sprechen.



  • out schrieb:

    Sone schrieb:

    Ich kann (mal wieder 🙄) nicht glauben, dass etwas so primitives VC schon zum crashen zwingt.
    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?

    Unter welchem System, mit welcher IDE und mit welchem Compiler arbeitest du eigentlich, Sone?

    Sone arbeitet gar nicht, der spielt bloss rum.



  • hustbaer schrieb:

    out schrieb:

    Sone schrieb:

    Ich kann (mal wieder 🙄) nicht glauben, dass etwas so primitives VC schon zum crashen zwingt.
    cooky, wieso bleibst du noch bei VC? Ist es das wirklich wert?

    Unter welchem System, mit welcher IDE und mit welchem Compiler arbeitest du eigentlich, Sone?

    Sone arbeitet gar nicht, der spielt bloss rum.

    👍


Anmelden zum Antworten