> On Jan. 25, 2015, 11:36 p.m., Diederik de Groot wrote:
> > /branches/11/include/asterisk/inline_api.h, lines 44-51
> > <https://reviewboard.asterisk.org/r/4370/diff/1/?file=71056#file71056line44>
> >
> >     You might want to check out:
> >         #define forceinline __inline__ __attribute__((always_inline))
> >         #define ensure_forceinline __attribute__((always_inline)) // inline 
> > or die
> >     
> >     To see if they would help forcing clang to inline
> 
> Matt Jordan wrote:
>     I gave it a shot, and clang still believes that the functions are 
> re-defined.
>     
>     There may be a magical invocation to get clang to believe that these 
> inlinings should occur, but I'm not sure what it is.
> 
> Diederik de Groot wrote:
>     I was intriged by the inline issue a little. There must be some solution. 
> Declaring the function static ought to help against the multiple definition 
> warning. Be cause the goal is to inline the function, we already expect the 
> function content to be replicated all over the place, so the argument in the 
> comment in include/asterisk/inline_api.h line 30 doesn't completely hold up.
>     
>     For the non-inlined version, static will not really be problematic, as 
> the clang compiler (even in -O0 mode) will optimize the multiple declarations 
> out (as opposed to gcc, which would not do this in -O0 mode, resulting in a 
> bigger binary then necessary).
>     
>     So:
>     --- include/asterisk/inline_api.h    2015-02-20 14:11:49.011228989 +0100
>     +++ include/asterisk/inline_api.h~    2015-02-20 14:11:38.000000000 +0100
>     @@ -52,7 +52,7 @@
>      
>      #if !defined(AST_API_MODULE)
>      #if defined(__clang__)
>     -#define AST_INLINE_API(hdr, body) static hdr; static inline hdr body
>     +#define AST_INLINE_API(hdr, body) static hdr; static forceinline hdr body
>      #else
>      #define AST_INLINE_API(hdr, body) hdr; extern inline hdr body
>      #endif
>     
>     Seems to do the trick, as far as i can tell. Can you verify this ?
> 
> Diederik de Groot wrote:
>     Diff went a little astray:
>     Final result should have looked like:
>     #if !defined(AST_API_MODULE)
>     #if defined(__clang__)
>     #define AST_INLINE_API(hdr, body) static hdr; static inline hdr body
>     #else
>     #define AST_INLINE_API(hdr, body) hdr; extern inline hdr body
>     #endif
>     #else
>     #define AST_INLINE_API(hdr, body) hdr; hdr body
>     #endif
>

Yup, that works just fine. I haven't disassembled anything to see what it 
actually generated, but it certainly compiled and ran. That meets my litmus 
test for this patch!


- Matt


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/4370/#review14280
-----------------------------------------------------------


On Feb. 19, 2015, 10:09 p.m., Matt Jordan wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/4370/
> -----------------------------------------------------------
> 
> (Updated Feb. 19, 2015, 10:09 p.m.)
> 
> 
> Review request for Asterisk Developers and Diederik de Groot.
> 
> 
> Bugs: ASTERISK-20850
>     https://issues.asterisk.org/jira/browse/ASTERISK-20850
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> This is a continuation of the patch put up for review on r3488. It addresses 
> the issues found on that review.
> 
> This patch *should* make Asterisk compile under clang. Note that compiling 
> with --enable-dev-mode will cause Asterisk to fail to compile under clang, as 
> it detects a number of warnings that aren't fixed under this patch.
> 
> 
> Diffs
> -----
> 
>   /branches/11/makeopts.in 432011 
>   /branches/11/main/Makefile 432011 
>   /branches/11/include/asterisk/utils.h 432011 
>   /branches/11/include/asterisk/inline_api.h 432011 
>   /branches/11/configure.ac 432011 
>   /branches/11/configure UNKNOWN 
>   /branches/11/Makefile 432011 
> 
> Diff: https://reviewboard.asterisk.org/r/4370/diff/
> 
> 
> Testing
> -------
> 
> * Compiled Asterisk with and without --enable-dev-mode using gcc. Asterisk 
> compiles correctly.
> * Compiled Asterisk without --enable-dev-mode using clang. Asterisk compiles, 
> links, and executes.
> 
> Note that you will need the BlocksRuntime to run Asterisk when it is compiled 
> with clang.
> 
> 
> Thanks,
> 
> Matt Jordan
> 
>

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to