Format() mit mehr als 3 Parametern und bcc32c (CLANG Seattle)



  • Hallo zusammen,

    können die Seattle User mal bitte den folgenden Code im 32bit CLANG Compiler ausprobieren?

    String s = Format(L"%s %s %s %s %s %s %s %s ", ARRAYOFCONST((L"1", L"2", L"3", L"4", L"5", L"6", L"7", L"8")) );
    Memo1->Lines->Add(s);
    
    s = Format(L"%s %s %s %s %s %s %s %s ", OPENARRAY(TVarRec, (L"1", L"2", L"3", L"4", L"5", L"6", L"7", L"8")) );
    Memo1->Lines->Add(s);
    
    s = Format(L"%s %s %s %s %s %s %s %s ", System::OpenArray<TVarRec>(L"1", L"2", L"3", L"4", L"5", L"6", L"7", L"8"), 7 );
    Memo1->Lines->Add(s);
    
    TVarRec args[] = {L"1", L"2", L"3", L"4", L"5", L"6", L"7", L"8"};
    s = Format(L"%s %s %s %s %s %s %s %s ", args, ARRAYSIZE(args)-1);
    Memo1->Lines->Add(s);
    

    Beim 3. Format() Aufruf bekomme ich folgende Exception:

    ---------------------------
    Benachrichtigung über Debugger-Exception
    ---------------------------
    Im Projekt Project1.exe ist eine Exception der Klasse EConvertError mit der Meldung 'Format '%s %s %s %s %s %s %s %s ' ungültig oder nicht kompatibel mit Argument' aufgetreten.
    ---------------------------
    Anhalten   Fortsetzen   Hilfe
    ---------------------------
    

    Und in der Ausgabe steht:

    1 2 3      
    1 2 3
    

    Kommentiere ich den 1. oder 2. Format() Aufruf aus, bekomme ich folgendes in der Ausgabe:

    1 2 3      
    1 2 3      
    1 2 3 4 5 6 7 8
    

    Unter dem klassichen 32bit und unter 64bit funktioniert das Ganze.
    Habe Subscription 1 installiert.

    Ich vermute mal das es sich hierbei um einen Bug im Bezug auf dem OpenArray Template handelt, oder ein Compiler Bug, denn der Sourcecode sollte doch unabhängig vom Compiler sein.
    Kann dies jemand bestätigen?

    MfG und schöne Ostern
    Stephan



  • Hallo Stephan,

    mit clang 32bit tritt der gleiche Effekt ein, allerdings bekomme ich keine Exception. Die Ausgabe ist
    1 2 3
    1 2 3
    1 2 3
    1 2 3 4 5 6 7 8

    Der Compiler beschwert sich aber über Mehrdeutigkeiten, ich musste Format durch System::Sysutils::Format ersetzen.



  • Hallo zusammen,

    also ich habe ein Ticket erstellt, mal sehe was dabei Raus kommt: https://quality.embarcadero.com/browse/RSP-14062
    Was ich noch herausgefunden habe ist das es im Release Mode funktioniert.

    MfG Stephan


Anmelden zum Antworten