public inbox for ecos-bugs@sourceware.org help / color / mirror / Atom feed
From: bugzilla-daemon@bugs.ecos.sourceware.org To: unassigned@bugs.ecos.sourceware.org Subject: [Bug 1001915] New: Invalid assert definition Date: Wed, 13 Nov 2013 10:45:00 -0000 [thread overview] Message-ID: <bug-1001915-777@http.bugs.ecos.sourceware.org/> (raw) Please do not reply to this email, use the link below. http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001915 Bug ID: 1001915 Summary: Invalid assert definition Product: eCos Version: 3.0 Target: All Architecture/Host All OS: Status: UNCONFIRMED Severity: major Priority: low Component: POSIX Assignee: unassigned@bugs.ecos.sourceware.org Reporter: jsetoain@ucm.es CC: ecos-bugs@ecos.sourceware.org According to ISO C, the assert macro must be an expression but it is defined as an statement (do { } while(0)). This definition causes trouble in several situation where "assert" is used as an expression. From: http://pubs.opengroup.org/onlinepubs/9699919799/functions/assert.html "The assert() macro shall insert diagnostics into programs; it shall expand to a void expression." Right now it is defined as follows: # define assert( __bool ) \ do { \ if (0 == (__bool)) { \ fprintf( stderr, "User assertion failed: \"%s\", at %s:%d\n", \ #__bool, __FILE__, __LINE__); \ abort(); \ } \ } while(0) I propose changing it to something like this: # define assert(__bool) \ ((__bool) \ ? (void)(0) \ : assert_failed(#__bool, __FILE__, __LINE__) And then define assert_failed as something like: void assert_failed(const char* assertion, const char* file, const char* line ) { fprintf( stderr, "User assertion failed: \"%s\", at %s:%d\n", assertion, file, line ); abort(); } This way, assert always evaluates to a void expression, as demanded by the standard. (PS: The whole fix would take changes in other macros, I'm just illustrating the problem and the solution). -- You are receiving this mail because: You are the assignee for the bug.
next reply other threads:[~2013-11-13 10:45 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-11-13 10:45 bugzilla-daemon [this message] -- strict thread matches above, loose matches on Subject: below -- 2013-11-13 10:45 bugzilla-daemon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-1001915-777@http.bugs.ecos.sourceware.org/ \ --to=bugzilla-daemon@bugs.ecos.sourceware.org \ --cc=unassigned@bugs.ecos.sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).