<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;">Hi Arshia,<div><br></div><div>  I’ve built numerous C++ Pd objects and have found at times C++ doesn’t seem to work well with C when it comes to binary runtime.  I learned that here: <a href="http://stackoverflow.com/questions/5397447/struct-padding-in-c">http://stackoverflow.com/questions/5397447/struct-padding-in-c</a></div><div><br></div><div> Though I haven’t encountered what Miller is saying that all struct elements are 64-bit aligned, did he mean pointers?  Because that is certainly the case.</div><div>  I don’t fully comprehend the scope of your code, essentially what is the need for a 4 byte offset?  And why does this statement need to be true: (boundmsg->a_w.w_symbol->s_name == atom_getsymbol(boundmsg)->s_name) ?  Or maybe I’m completely misinterpreting your issue? </div><div><br></div><div>  For the former, can you eliminate the issue by checking for offset size, like:</div><div><br></div><div><pre style="margin-top: 0px; margin-bottom: 0px; widows: 1;"><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(209, 47, 27);"><span style="color: #78492a">#include </span><stddef.h></div></pre><div><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(209, 47, 27);"><span style="color: #78492a">#include </span><iostream></div></div></div><div style="margin: 0px; font-size: 11px; font-family: Menlo; color: rgb(209, 47, 27);"><br></div><div><div style="margin: 0px; font-size: 11px; font-family: Menlo;"><div style="margin: 0px; color: rgb(187, 44, 162);">struct<span style="color: #000000"> D</span></div><div style="margin: 0px;">{</div><div style="margin: 0px;">    <span style="color: #bb2ca2">double</span> *d;</div><div style="margin: 0px;">};</div><div style="margin: 0px; min-height: 13px;"><br></div><div style="margin: 0px; color: rgb(187, 44, 162);">struct<span style="color: #000000"> T {</span></div><div style="margin: 0px;">    <span style="color: #bb2ca2">int</span> *i;</div><div style="margin: 0px;">    <span style="color: #bb2ca2">short</span> *j;</div><div style="margin: 0px;">    <span style="color: #4f8187">D</span> *k;</div><div style="margin: 0px;">};</div></div><div><br></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;"><span style="color: #bb2ca2">int</span> main() {</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">    </div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">    <span style="color: #bb2ca2">int</span> a = <span style="color: #78492a">offsetof</span>(<span style="color: #4f8187">T</span>, <span style="color: #4f8187">i</span>);</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">    <span style="color: #bb2ca2">int</span> b = <span style="color: #78492a">offsetof</span>(<span style="color: #4f8187">T</span>, <span style="color: #4f8187">j</span>);</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">    <span style="color: #bb2ca2">int</span> c = <span style="color: #78492a">offsetof</span>(<span style="color: #4f8187">T</span>, <span style="color: #4f8187">k</span>);</div><p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 11px; font-family: Menlo;">   <span style="color: rgb(187, 44, 162);">if</span>(b - a == <span style="color: rgb(39, 42, 216);">8</span> && c - b == <span style="color: rgb(39, 42, 216);">8</span>)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">        <span style="color: #703daa">std</span>::<span style="color: #703daa">cout</span> << <span style="color: #d12f1b">"8 offset"</span> << <span style="color: #703daa">std</span>::<span style="color: #3d1d81">endl</span>; <span style="color: #008400">// do something here</span></div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">    <span style="color: #bb2ca2">else</span> <span style="color: #bb2ca2">if</span> (b - a == <span style="color: #272ad8">4</span> && c - b == <span style="color: #272ad8">4</span>)</div><div style="margin: 0px; font-size: 11px; font-family: Menlo;">        <span style="color: rgb(112, 61, 170);">std</span>::<span style="color: rgb(112, 61, 170);">cout</span> << <span style="color: rgb(209, 47, 27);">"4 offset"</span> << <span style="color: rgb(112, 61, 170);">std</span>::<span style="color: rgb(61, 29, 129);">endl</span>; <span style="color: rgb(0, 132, 0);">// do something else here</span></div><p style="margin: 0px; font-size: 11px; font-family: Menlo; min-height: 13px;">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 11px; font-family: Menlo;">  }</div><div><br></div><div>Best,</div><div>Rob Esler</div>----------------------------------------------------------------------<br><br>Message: 1<br>Date: Wed, 3 Jun 2015 11:29:42 +0200<br>From: Arshia Cont <<a href="mailto:Arshia.Cont@ircam.fr">Arshia.Cont@ircam.fr</a>><br>To: Antoine Rousseau <<a href="mailto:ant1rousseau1@gmail.com">ant1rousseau1@gmail.com</a>><br>Cc: pd-dev <<a href="mailto:pd-dev@lists.iem.at">pd-dev@lists.iem.at</a>><br>Subject: Re: [PD-dev] Compiling objects with gnu++14<br>Message-ID: <<a href="mailto:30D6E725-3B91-4A4E-B5B7-F22714396B02@ircam.fr">30D6E725-3B91-4A4E-B5B7-F22714396B02@ircam.fr</a>><br>Content-Type: text/plain; charset="utf-8"<br><br>Antoine,<br><br>Ignore details of my short code… the t_atom is actually correctly allocated..<br><br>What happens is that when boundmsg is accessed outside this score (using atom_getsymbol) the address of its struct members are NOT the same (we have verified this in different ways).<br><br>Miller suggested that “It looks like C++11 has decided that structure elements should all be 64-bit aligned.  This would mean that you simply can’t link C++11 and Gnu C code together”<br><br>You could check it by printing out the pointers,<br><br>boundmsg->a_type<br>boundmsg->a_w.w_symbol<br><br>These differ by 4 in Pd - if your compiler wants them to differ by 8, the two aren’t compatible.<br><br>I can’t seem to find a compiler flag in clang that globally sets the alignment!!! I can do that locally for each struct but this will make the object non-distributable… .<br><br><br><blockquote type="cite">On 03 Jun 2015, at 10:33, Antoine Rousseau <<a href="mailto:ant1rousseau1@gmail.com">ant1rousseau1@gmail.com</a>> wrote:<br><br>Maybe I don't understand well, but your short code example is incorrect :<br><br>t_atom *boundmsg;<br>boundmsg->a_type = A_SYMBOL;boundmsg->a_w.w_symbol = ss;<br><br>because you are assigning fields of a not allocated structure : boundmsg here is just the undefined address of a potential storage.<br><br>This should work :<br><br>t_atom boundmsg;<br>boundmsg.a_type = A_SYMBOL; boundmsg.a_w.w_symbol = ss;<br><br><br>Or :<br><br>t_atom *boundmsg = getbytes(sizeof(t_atom));<br>boundmsg->a_type = A_SYMBOL;boundmsg->a_w.w_symbol = ss;<br><br><br>Hope this helps, sorry if I'm off topic.<br><br>2015-06-03 10:00 GMT+02:00 Arshia Cont <<a href="mailto:Arshia.Cont@ircam.fr">Arshia.Cont@ircam.fr</a> <<a href="mailto:Arshia.Cont@ircam.fr">mailto:Arshia.Cont@ircam.fr</a>>>:<br>Thomas,<br><br>My clang version is<br>Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)<br>Target: x86_64-apple-darwin14.3.0<br>Thread model: posix<br><br><br>Before I give you the compilation flags, here is what it comes down to.. basically, the following code gives indeterministic behaviour due to memory misalignment when the atom pointer is passed to :<br><br>t_atom *boundmsg; // etc.<br>boundmsg->a_type = A_SYMBOL;boundmsg->a_w.w_symbol = ss;<br><br>assert(boundmsg->a_w.w_symbol->s_name == atom_getsymbol(boundmsg)->s_name); // imagine that my assert works on char*! simplifying here<br><br><br>Here is an example of the compilation, following Katja’s blog on soundtouch~. I am using i386 on purpose here for testing.You can ignore capital letter flags that come from us: <br><br>/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch i386 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++1y -stdlib=libc++ -Wno-trigraphs -fshort-enums -Os -Wno-missing-field-initializers -Wmissing-prototypes -Wno-return-type -Wunreachable-code -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wmissing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wempty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wassign-enum -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DNDEBUG=1 -DDEPLOYMENT_VERSION=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.7 -g -fvisibility-inlines-hidden -Wno-sign-conversion -I/Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/antescofo~.hmap -I/Users/acont/Devs/MyFlextProjects/antescofo/build/Deployment/include -I/Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/DerivedSources/i386 -I/Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/DerivedSources -Wmost -Wno-unknown-pragmas -Wno-four-char-constants -F/Users/acont/Devs/MyFlextProjects/antescofo/build/Deployment -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks -DNDEBUG=1 -DARCHI_MAC_OS=4 -DARCHI_LINUX=5 -DARCHI_WINDOWS=6 -DANTESCOFO_ARCHI=ARCHI_MAC_OS -DTARGET_PD=2 -DTARGET_STANDALONE_FILE=3 -DTARGET_MAXSDK=4 -DTARGET_ASCOGRAPH=7 -I/Users/acont/Devs/MyFlextProjects/antescofo/../Mutant-libs/oscpack_1_1_0_RC2/ip -I/Users/acont/Devs/MyFlextProjects/antescofo/../Mutant-libs/oscpack_1_1_0_RC2/osc -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -DANTESCOFO_TARGET=TARGET_PD -I/Users/acont/Devs/MyFlextProjects/antescofo/../Mutant-libs/pd-0.46-6/src -fvisibility=hidden -fcheck-new -MMD -MT dependencies -MF /Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/Objects-normal/i386/Antescofo_PdClass.d --serialize-diagnostics /Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/Objects-normal/i386/Antescofo_PdClass.dia -c /Users/acont/Devs/MyFlextProjects/antescofo/sources/Antescofo_PdClass.cpp -o /Users/acont/Devs/MyFlextProjects/antescofo/build/antescofo~.build/Deployment/pd_static.build/Objects-normal/i386/Antescofo_PdClass.o<br><br>Arshia Cont<br><br><br><br><br><blockquote type="cite">On 02 Jun 2015, at 21:43, Thomas Grill <<a href="mailto:gr@grrrr.org">gr@grrrr.org</a> <<a href="mailto:gr@grrrr.org">mailto:gr@grrrr.org</a>>> wrote:<br><br>Hi Arshia,<br>which compiler is it exactly that you use? Can you copy the options?<br>best, Thomas<br><br>2015-06-02 14:35 GMT+02:00 Arshia Cont <<a href="mailto:Arshia.Cont@ircam.fr">Arshia.Cont@ircam.fr</a> <<a href="mailto:Arshia.Cont@ircam.fr">mailto:Arshia.Cont@ircam.fr</a>>>:<br>Thank you Katja for the swift response! We will wait for that then.<br><br>Any one running into run-time problems when compiling with C++11 or C++14? We seem to have memory alignment issues… .<br><br>Arshia Cont<br><br><br><br><br><blockquote type="cite">On 02 Jun 2015, at 14:23, katja <<a href="mailto:katjavetter@gmail.com">katjavetter@gmail.com</a> <<a href="mailto:katjavetter@gmail.com">mailto:katjavetter@gmail.com</a>>> wrote:<br><br>On Tue, Jun 2, 2015 at 1:07 PM, Arshia Cont <<a href="mailto:Arshia.Cont@ircam.fr">Arshia.Cont@ircam.fr</a> <<a href="mailto:Arshia.Cont@ircam.fr">mailto:Arshia.Cont@ircam.fr</a>>> wrote:<br><br>[...]<br><br><blockquote type="cite">My second question would be on double-precision audio externals.. I see discussions on class_new64 but can’t seem to find any trace of it in 0.46-6.. I dig into the archives to figure this one out first!<br></blockquote><br>In 2011 I made a set of patch files for vanilla pd 0.43 to enable<br>double precision builds (where t_float and t_sample are doubles). That<br>can be found here:<br><br><a href="https://github.com/pd-projects/pd-double">https://github.com/pd-projects/pd-double</a> <<a href="https://github.com/pd-projects/pd-double">https://github.com/pd-projects/pd-double</a>><br><br>You could try it out for evaluation but Miller wants to scrutinize,<br>test and improve the patch files before accepting them.<br><br>Katja<br><br></blockquote><br><br>_______________________________________________<br>Pd-dev mailing list<br><a href="mailto:Pd-dev@lists.iem.at">Pd-dev@lists.iem.at</a> <<a href="mailto:Pd-dev@lists.iem.at">mailto:Pd-dev@lists.iem.at</a>><br><a href="http://lists.puredata.info/listinfo/pd-dev">http://lists.puredata.info/listinfo/pd-dev</a> <<a href="http://lists.puredata.info/listinfo/pd-dev">http://lists.puredata.info/listinfo/pd-dev</a>><br><br><br><br>-- <br>Thomas Grill<br><a href="http://grrrr.org">http://grrrr.org</a> <<a href="http://grrrr.org/">http://grrrr.org/</a>><br></blockquote><br>_______________________________________________<br>Pd-dev mailing list<br><a href="mailto:Pd-dev@lists.iem.at">Pd-dev@lists.iem.at</a> <<a href="mailto:Pd-dev@lists.iem.at">mailto:Pd-dev@lists.iem.at</a>><br><a href="http://lists.puredata.info/listinfo/pd-dev">http://lists.puredata.info/listinfo/pd-dev</a> <<a href="http://lists.puredata.info/listinfo/pd-dev">http://lists.puredata.info/listinfo/pd-dev</a>><br><br><br><br><br>-- <br>   Antoine Rousseau <br> <a href="http://www.metalu.net">http://www.metalu.net</a> <<a href="http://metalu.net/">http://metalu.net/</a>> __ <a href="http://www.metaluachahuter.com/">http://www.metaluachahuter.com/</a><<a href="http://www.metaluachahuter.com/compagnies/al1-ant1/">http://www.metaluachahuter.com/compagnies/al1-ant1/</a>> __ <a href="http://al1ant1.free.fr">http://al1ant1.free.fr</a> <<a href="http://al1ant1.free.fr/">http://al1ant1.free.fr/</a>><br><br>_______________________________________________<br>Pd-dev mailing list<br><a href="mailto:Pd-dev@lists.iem.at">Pd-dev@lists.iem.at</a><br><a href="http://lists.puredata.info/listinfo/pd-dev">http://lists.puredata.info/listinfo/pd-dev</a></blockquote>
<br></div></body></html>