internal compiler error gcc



  • yay ich habs geschafft! 😃
    "/home/****/CodeBlocksProjekte/JSSerializer/JsStringify.h|57|interner Compiler-Fehler: in create_tmp_var, bei gimplify.c:479|"

    http://ideone.com/DCTWJj

    ... ehrlich gesagt ist das jetzt irgendwie blöd 😞

    EDIT: sollte ich das reporten?

    #include <iostream>
    #include <type_traits>
    #include <string>
    #include <sstream>
    #include <algorithm>
    #include <iterator>
    #include <vector>
    
    struct StringificationOptions
    {
        std::string delimiter;
    };
    
    #define DEFAULT_OPTIONS {}
    
    template <typename T, template <typename, class = std::allocator <T> > class ContainerT,
              class = typename std::enable_if<std::is_arithmetic<T>::value>::type >
    std::string js_stringify(std::string const& name, ContainerT <T> values, StringificationOptions = DEFAULT_OPTIONS)
    {
        std::stringstream sstr;
        sstr << '"'
            << name
            << "\":["
        ;
        if (!values.empty())
        {
            auto bte = values.end();
            bte--;
            std::copy(values.begin(), bte, std::ostream_iterator<T>(sstr, ","));
            sstr << values.back();
        }
        sstr << ']';
        return sstr.str();
    }
    
    std::string js_stringify(std::string const& name, std::string const& value, StringificationOptions = DEFAULT_OPTIONS, bool as_array = false)
    {
        if (as_array)
            return js_stringify(name, std::vector <std::string::value_type> {value.begin(), value.end()}); // this is line 57 in the real header
    
        std::stringstream sstr;
        sstr << "\""
            << name
            << "\":\""
            << value
            << "\""
        ;
        return sstr.str();
    }
    
    int main() {
    	std::vector <int> c = {1, 2, 3};
        std::cout << js_stringify("c", c) << "\n";
    	return 0;
    }
    


  • Die Zeile die das Problem fixed ist übrigens:

    #define DEFAULT_OPTIONS StringificationOptions{}



  • Ja, man kann das Problem ja vereinfachen:

    #include <string>
    
    struct StringificationOptions
    {
        std::string delimiter;
    };
    
    void crashMe(StringificationOptions = {})
    {
    }
    
    int main() {
        crashMe();
        return 0;
    }
    

    Ist auch irgendwie nicht sinnvoll was da steht oder ? 😃

    Ja würde ich reporten, wenn es noch nicht gemeldet ist.

    EDIT:
    Tatsache, mit

    void crashMe(StringificationOptions = StringificationOptions{})
    {
    }
    

    gehts. Aber das ist doch auch kein valider C++ Code ? 😕
    Oder steht ich grad nur aufm Schlauch ?



  • Es ist schon zu spät zum denken -.- (EDIT 3)
    Ja die Options werden nur bei manchen Funktionen verwendet, müssen aber defaulted sein. Ich lasse den namen weg, wenn ich sie nicht brauche (ein hack um der Warnung zu entgehen)



  • Tadaaaa:
    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58501

    Den offensichtlichen Behelfscode hat DarkShadow44 ja schon gepostet.


  • Mod

    Ist auch irgendwie nicht sinnvoll was da steht oder ?

    Doch, sogar sehr. Das sollte sogar problemlos kompilieren.



  • Doch, sogar sehr. Das sollte sogar problemlos kompilieren.

    Und was soll der Code machen ? 😕



  • siehe oben mein edit 😃

    Es ist schon zu spät zum denken -.- (EDIT 3)
    Ja die Options werden nur bei manchen Funktionen verwendet, müssen aber defaulted sein. Ich lasse den namen weg, wenn ich sie nicht brauche (ein hack um der Warnung zu entgehen)


  • Mod

    DarkShadow44 schrieb:

    Und was soll der Code machen ? 😕

    Moment, meinst du die vereinfachte Version von dir (die meine ich), oder die im OP?



  • DarkShadow44 schrieb:

    Und was soll der Code machen ? 😕

    Ein Default-Argument für einen unbenannten Parameter angeben.



  • Moment, meinst du die vereinfachte Version von dir (die meine ich), oder die im OP?

    Ich meinte die vereinfachte Version von mir.
    Ich dachte unbenannte Parameter wären nur erlaubt wenn man die Funktionssignatur vordeklariert, und nicht bei der eigentlichen Definition... 🙄
    Wieder was gelernt. 😃


Anmelden zum Antworten