<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Should be fixed as of&nbsp;d177df3d628660f602ccde28c1b1bf1b316e80d0</div><div class=""><br class=""></div><div class="">Greetings</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>Matthias</div><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 31, 2015, at 4:02 PM, Matthias Braun &lt;<a href="mailto:matze@braunis.de" class="">matze@braunis.de</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Ein paar erste Gedanken zu Punkt 4 (muss mir den Standard aber noch im Detail angucken): Ich nehme an es ist entweder:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">- Unsere Definition von integere constant expressions ist noch buggy</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">- oder msvc klassifiziert Dinge als integer constant expressions die der Standard nicht erlaubt</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">- oder der Standard erlaubt implementation defined extensions was eine integer constant expression ist und wir sollten nen —ms Fall einbauen.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Gruß</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span class="Apple-tab-span" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: pre; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">        </span><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Matthias</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">On Jan 31, 2015, at 3:20 PM, Moritz Kroll &lt;<a href="mailto:Moritz.Kroll@avira.com" class="">Moritz.Kroll@avira.com</a>&gt; wrote:<br class=""><br class="">Hallo nochmal,<br class=""><br class="">ich habe für Punkt 3. einen Patch im Anhang, der hoffentlich die<br class="">Bedingungen von C++03 7.1.3.2 erfüllt:<br class=""><br class="">----<br class="">In a given non-class scope, a typedef specifier can be used to redefine<br class="">the name of any type declared in that scope to refer to the type to<br class="">which it already refers. [Example:<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct s { /* ... */ } s;<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef int I;<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef int I;<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef I I;<br class="">—<br class="">end example]<br class="">----<br class=""><br class="">Der Patch löst bei den Windows-Headers auch die meisten Probleme mit<br class="">Compile-Zeit-Asserts.<br class="">Ein Problem bleibt aber:<br class=""><br class="">4. Bei dem angehängten Testfall bekomme ich einen "variable length<br class="">array" Fehler. Das Hauptproblem scheint dieses zu sein: Wenn A ein<br class="">typedef einer Struktur ist, wird "(A *) 0" nicht als<br class="">EXPR_CLASS_INTEGER_CONSTANT aufgefasst, sondern nur als EXPR_CLASS_CONSTANT:<br class=""><br class="">ast.c:is_constant_expression -&gt; case EXPR_UNARY_CAST<br class=""><br class="">if (is_type_scalar(type)) {<br class="">&nbsp;&nbsp;expression_classification_t const cls<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= is_constant_expression(expression-&gt;unary.value);<br class="">&nbsp;&nbsp;/* Can't be an integer constant anymore */<br class="">&nbsp;&nbsp;return MIN(cls, EXPR_CLASS_CONSTANT);<br class="">}<br class=""><br class="">Wenn ich hier einfach cls zurückgebe, funktioniert es. Ich schätze mal,<br class="">cls sollte aber nur unter speziellen Bedingungen direkt zurückgegeben<br class="">werden, oder? Sonst wäre der Spezialfall mit dem MIN ja wahrscheinlich<br class="">nicht eingebaut worden.<br class=""><br class="">Schöne Grüße<br class="">Moritz<br class=""><br class=""><br class="">On 31.01.2015 01:33, Moritz Kroll wrote:<br class=""><blockquote type="cite" class="">Hallo zusammen,<br class=""><br class="">ich probiere nach einiger Zeit mal wieder cparser in einer aktuellen<br class="">Version zu kompilieren, um aus Windows-Headers automatisch Informationen<br class="">über API-Funktionen zu extrahieren (Namen, Parameternamen und -typen,<br class="">Rückgabetyp, calling convention). Die Informationen verwende ich bei der<br class="">Stack-Analyse von Funktionen in einem Disassembler. Ich verwende dazu<br class="">ein eigenes "wrappergen"-Modul auf Basis von write_jna.<br class=""><br class="">Zuerst einmal bekomme ich bei eurer Anleitung<br class="">(<a href="http://pp.ipd.kit.edu/firm/Download" class="">http://pp.ipd.kit.edu/firm/Download</a>) diese Fehler:<br class=""><br class="">-------<br class="">$ git clone <a href="http://pp.ipd.kit.edu/git/cparser.git" class="">http://pp.ipd.kit.edu/git/cparser.git</a><br class="">Cloning into 'cparser'...<br class="">remote: Counting objects: 14860, done.<br class="">remote: Compressing objects: 100% (4436/4436), done.<br class="">remote: Total 14860 (delta 10738), reused 14343 (delta 10343)<br class="">Receiving objects: 100% (14860/14860), 2.83 MiB, done.<br class="">Resolving deltas: 100% (10738/10738), done.<br class=""><br class="">$ cd cparser<br class="">$ git submodule update --init<br class="">Submodule 'libfirm' (<a href="http://pp.info.uni-karlsruhe.de/git/libfirm.git/" class="">http://pp.info.uni-karlsruhe.de/git/libfirm.git/</a>)<br class="">registere<br class="">d for path 'libfirm'<br class="">Cloning into 'libfirm'...<br class="">fatal: The remote end hung up unexpectedly<br class="">fatal: protocol error: bad pack header<br class="">Clone of '<a href="http://pp.info.uni-karlsruhe.de/git/libfirm.git/'" class="">http://pp.info.uni-karlsruhe.de/git/libfirm.git/'</a> into<br class="">submodule path<br class="">'libfirm' failed<br class="">-------<br class=""><br class="">Nachdem ich eine Weile daran verzweifelt war, hatte ich dann das Github<br class="">Repository genommen.<br class=""><br class="">Dabei bin ich bei Git-Referenz c89dd8e auf ein paar Probleme gestoßen:<br class=""><br class="">1. Die Option "--ms" hat keine Auswirkungen, da init_tokens aufgerufen<br class="">wird, bevor das entsprechende "dialect" Flag in init_c_dialect gesetzt wird.<br class=""><br class="">2. Bei der Deklaration von Funktionszeigertypen werden im MS-Modus keine<br class="">calling convention modifier erlaubt (siehe<br class=""><a href="https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx" class="">https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx</a> und angehängter<br class="">Testkäse (Hi Christoph ^_^) stdcall-func-typedef.c). Ich hab dazu einen<br class="">Patch angehängt.<br class=""><br class="">3. Im C++-Modus wird bei<br class=""><br class="">typedef long NTSTATUS;<br class="">typedef NTSTATUS *PNTSTATUS;<br class="">typedef long *PNTSTATUS;<br class=""><br class="">die zweite Definition von "PNTSTATUS" als unerlaubte Redefinition<br class="">aufgefasst (siehe multi-typedef.cpp). An der entsprechenden Stelle in<br class="">record_entity sollten aber eigentlich bereits alle typedefs übersprungen<br class="">werden. Scheint ihm aber trotzdem nicht gleich genug zu sein. Vielleicht<br class="">wegen den Zeigern?<br class=""><br class="">Wäre schön, wenn ihr meinen Patch einbauen könntet und ein paar aktive<br class="">Blicke auf die beiden anderen Probleme werfen könntet ;)<br class=""><br class="">Schöne Grüße<br class="">Moritz<br class=""><br class=""></blockquote><br class="">--<br class="">Moritz Kroll<br class="">Software Developer &amp; Researcher<br class="">Advanced Threat Research And Protection Systems<br class="">Email: <a href="mailto:moritz.kroll@avira.com" class="">moritz.kroll@avira.com</a><br class=""><br class="">--<br class="">Avira Operations GmbH &amp; Co. KG<br class="">Kaplaneiweg 1 | 88069 Tettnang | Deutschland / Germany<br class="">Telefon / Telephone: +49 7542-500 0<br class="">Telefax / Facsimile: +49 7542-500 3000<br class=""><br class="">Registergericht: Amtsgericht Ulm, HRA 722586 | USt.-IdNr.: DE 815289569 | Pers. haftende Gesellschafterin: Avira OP GmbH | Firmensitz: Tettnang | Registergericht: Amtsgericht Ulm, HRB 726712 | Geschäftsführer: Travis Witteveen<br class=""><br class="">Commercial Register: Amtsgericht Ulm, HRA 722586 | VAT-ID: DE 815289569 | Personally Liable Partner: Avira OP GmbH | Headquarters: Tettnang | Commercial Register: Amtsgericht Ulm, HRB 726712 | Chief Executive Officer (CEO): Travis Witteveen<br class="">&lt;cpp-typedef-redef.patch&gt;&lt;cassert-on-offset.c&gt;_______________________________________________<br class="">Firm mailing list<br class=""><a href="mailto:Firm@ira.uni-karlsruhe.de" class="">Firm@ira.uni-karlsruhe.de</a><br class=""><a href="https://lists.ira.uni-karlsruhe.de/mailman/listinfo/firm" class="">https://lists.ira.uni-karlsruhe.de/mailman/listinfo/firm</a><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Firm mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:Firm@ira.uni-karlsruhe.de" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Firm@ira.uni-karlsruhe.de</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.ira.uni-karlsruhe.de/mailman/listinfo/firm" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">https://lists.ira.uni-karlsruhe.de/mailman/listinfo/firm</a></div></blockquote></div><br class=""></body></html>