Add attribute((noreturn)) to romcc
authorStefan Reinauer <stepan@coresystems.de>
Sun, 28 Feb 2010 18:37:38 +0000 (18:37 +0000)
committerStefan Reinauer <stepan@openbios.org>
Sun, 28 Feb 2010 18:37:38 +0000 (18:37 +0000)
It doesn't do anything, but it allows the same code to be compiled with gcc and
romcc.

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Ronald G. Minnich <rminnich@gmail.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5172 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/romcc/romcc.c

index 2691036c186949c5cbfe357696bcbd6842be8c60..b961d66c3294fd67def0d600dee19f905bf7a6a6 100644 (file)
@@ -1083,6 +1083,7 @@ struct compile_state {
        struct hash_entry *i_break;
        struct hash_entry *i_default;
        struct hash_entry *i_return;
+       struct hash_entry *i_noreturn;
        /* Additional hash entries for predefined macros */
        struct hash_entry *i_defined;
        struct hash_entry *i___VA_ARGS__;
@@ -12758,6 +12759,9 @@ static unsigned int attrib(struct compile_state *state, unsigned int attributes)
                        }
                        attributes |= ATTRIB_ALWAYS_INLINE;
                }
+               else if (ident == state->i_noreturn) {
+                       // attribute((noreturn)) does nothing (yet?)
+               }
                else {
                        error(state, 0, "Unknown attribute:%s", ident->name);
                }
@@ -24994,6 +24998,7 @@ static void compile(const char *filename,
        /* Memorize where some attribute keywords are. */
        state.i_noinline      = lookup(&state, "noinline", 8);
        state.i_always_inline = lookup(&state, "always_inline", 13);
+       state.i_noreturn      = lookup(&state, "noreturn", 8);
 
        /* Process the command line macros */
        process_cmdline_macros(&state);