title: odd compiled code
body: <p>I've compiled some Qt code with google's nacl compiler, but the ncval validator does not grok it. One example among many:</p>
  
  <pre><code>src/corelib/animation/qabstractanimation.cpp:165
  </code></pre>
  
  <p>Here's the relevant code:</p>
  
  <pre><code>#define Q_GLOBAL_STATIC(TYPE, NAME)                                  \
      static TYPE *NAME()                                              \
      {                                                                \
          static TYPE thisVariable;                                    \
          static QGlobalStatic&lt;TYPE &gt; thisGlobalStatic(&amp;thisVariable); \
          return thisGlobalStatic.pointer;                             \
      }
  
  #ifndef QT_NO_THREAD
  Q_GLOBAL_STATIC(QThreadStorage&lt;QUnifiedTimer *&gt;, unifiedTimer)
  #endif
  </code></pre>
  
  <p>which compiles to:</p>
  
  <pre><code>00000480 &lt;_ZL12unifiedTimerv&gt;:
       480:       55                      push   %ebp
       481:       89 e5                   mov    %esp,%ebp
       483:       57                      push   %edi
       484:       56                      push   %esi
       485:       53                      push   %ebx
       486:       83 ec 2c                sub    $0x2c,%esp
       489:       c7 04 24 28 00 2e 10    movl   $0x102e0028,(%esp)
       490:       8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi
       494:       8d bc 27 00 00 00 00    lea    0x0(%edi,%eiz,1),%edi
       49b:       e8 fc ff ff ff          call   49c &lt;_ZL12unifiedTimerv+0x1c&gt;
       4a0:       84 c0                   test   %al,%al
       4a2:       74 1c                   je     4c0 &lt;_ZL12unifiedTimerv+0x40&gt;
       4a4:       0f b6 05 2c 00 2e 10    movzbl 0x102e002c,%eax
       4ab:       83 f0 01                xor    $0x1,%eax
       4ae:       84 c0                   test   %al,%al
       4b0:       74 0e                   je     4c0 &lt;_ZL12unifiedTimerv+0x40&gt;
       4b2:       b8 01 00 00 00          mov    $0x1,%eax
       4b7:       eb 27                   jmp    4e0 &lt;_ZL12unifiedTimerv+0x60&gt;
       4b9:       8d b4 26 00 00 00 00    lea    0x0(%esi,%eiz,1),%esi
       4c0:       b8 00 00 00 00          mov    $0x0,%eax
       4c5:       eb 19                   jmp    4e0 &lt;_ZL12unifiedTimerv+0x60&gt;
       4c7:       90                      nop
       4c8:       90                      nop
       4c9:       90                      nop
       4ca:       90                      nop
       4cb:       90                      nop
  </code></pre>
  
  <p>Check the call instruction at <strong>49b:</strong> it is what the validator cannot grok. What on earth could induce the compiler to issue an instruction that calls into the middle of itself? Is there a way around this? I've compiled with -g -O0 -fno-inline. Compiler bug?</p>