[ 
https://issues.apache.org/jira/browse/PROTON-2207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jiri Daněk reassigned PROTON-2207:
----------------------------------

    Assignee: Andrew Stitcher

> Proton-c clients cannot really be compiled with strict C89 with gnu 
> compatible compilers
> ----------------------------------------------------------------------------------------
>
>                 Key: PROTON-2207
>                 URL: https://issues.apache.org/jira/browse/PROTON-2207
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c
>            Reporter: Andrew Stitcher
>            Assignee: Andrew Stitcher
>            Priority: Minor
>             Fix For: proton-c-0.32.0
>
>
> In testing the 0.31.0rc2 release with clang 10 on fedora 32 I get the 
> following:
> {noformat}
> In file included from ../c/examples/send-abort.c:22:
> In file included from ../c/include/proton/connection.h:26:
> In file included from ../c/include/proton/codec.h:26:
> ../c/include/proton/object.h:206:11: error: '_Bool' is a C99 extension 
> [-Werror,-Wc99-extensions]
> PN_EXTERN bool pn_class_equals(const pn_class_t *clazz, void *a, void *b);
>  ^
> /usr/lib64/clang/10.0.0/include/stdbool.h:15:14: note: expanded from macro 
> 'bool'
> #define bool _Bool
> {noformat}
> This is clearly correct in that stdbool.h/_Bool is indeed a C99 feature.
> However for non C99 compilers we have some hacks in {{proton/type_compat.h}} 
> which define bool to be char. Looking at the logic there though the check is 
> to assume that you should include stdbool if the compiler is C99 or (non 
> ancient) gcc compatible compiler.
> This logic is not correct if you are explicitly compiling the code as C90 
> which we do for our example code to ensure that client code could be C89. As 
> the compiler version will be unchanged even though it no longer should 
> support C99.
> This new version of clang is now picking up on the logic failure.
> At this point I think the solution is actually to change our base compiler 
> requirements to be C99. The reason we allow C89 is because Visual Studio 
> didn't support C99 constructs when the project started. Since VS2013 
> (Compiler version 18) all the C99 constructs we require are support by Visual 
> Studio too.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to