From: Richard Kenner Date: Wed, 30 Nov 1994 20:48:00 +0000 (-0500) Subject: (decl_attribute): Allow special names (e.g, `word') for mode X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=caab5771c8058e7a6ea92c5d806bcd69e2c9b2c1;p=gcc.git (decl_attribute): Allow special names (e.g, `word') for mode attribute. From-SVN: r8582 --- diff --git a/gcc/c-common.c b/gcc/c-common.c index f3844e2286a..e4207569c96 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -297,27 +297,36 @@ found_attr:; && TREE_CODE (TREE_VALUE (args)) == IDENTIFIER_NODE) { int i; - char *specified_name - = IDENTIFIER_POINTER (TREE_VALUE (args)); + char *specified_name = IDENTIFIER_POINTER (TREE_VALUE (args)); + enum machine_mode mode = VOIDmode; + tree typefm; + + /* Give this decl a type with the specified mode. + First check for the special modes. */ + if (! strcmp (specified_name, "byte") + || ! strcmp (specified_name, "__byte__")) + mode = byte_mode; + else if (!strcmp (specified_name, "word") + || ! strcmp (specified_name, "__word__")) + mode = word_mode; + else if (! strcmp (specified_name, "pointer") + || !strcmp (specified_name, "__pointer__")) + mode = ptr_mode; + else + for (i = 0; i < NUM_MACHINE_MODES; i++) + if (!strcmp (specified_name, GET_MODE_NAME (i))) + mode = (enum machine_mode) i; - /* Give this decl a type with the specified mode. */ - for (i = 0; i < NUM_MACHINE_MODES; i++) - if (!strcmp (specified_name, GET_MODE_NAME (i))) - { - tree typefm - = type_for_mode (i, TREE_UNSIGNED (type)); - if (typefm != 0) - { - TREE_TYPE (decl) = type = typefm; - DECL_SIZE (decl) = 0; - layout_decl (decl, 0); - } - else - error ("no data type for mode `%s'", specified_name); - break; - } - if (i == NUM_MACHINE_MODES) + if (mode == VOIDmode) error_with_decl (decl, "unknown machine mode `%s'", specified_name); + else if ((typefm = type_for_mode (mode, TREE_UNSIGNED (type))) == 0) + error_with_decl (decl, "no data type for mode `%s'", specified_name); + else + { + TREE_TYPE (decl) = type = typefm; + DECL_SIZE (decl) = 0; + layout_decl (decl, 0); + } } else if ((!strcmp (IDENTIFIER_POINTER (name), "section") || !strcmp (IDENTIFIER_POINTER (name), "__section__"))