OSDN Git Service

* config/avr/avr.c (avr_handle_fndecl_attribute): Generate a
authormarekm <marekm@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Nov 2004 23:15:59 +0000 (23:15 +0000)
committermarekm <marekm@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 28 Nov 2004 23:15:59 +0000 (23:15 +0000)
warning if the function name does not begin with "__vector" and the
function has either the 'signal' or 'interrupt' attribute.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91433 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/avr/avr.c

index 4d4cad0..591a97c 100644 (file)
@@ -1,5 +1,11 @@
 2004-11-28  Theodore A. Roth  <troth@openavr.org>
 
+       * config/avr/avr.c (avr_handle_fndecl_attribute): Generate a
+       warning if the function name does not begin with "__vector" and the
+       function has either the 'signal' or 'interrupt' attribute.
+
+2004-11-28  Theodore A. Roth  <troth@openavr.org>
+
        * config/avr/avr.c (avr_mcu_types): Add entries for atmega48,
        atmega88, atmega168, attiny13, attiny2313, at90can128, atmega165,
        atmega325, atmega3250, atmega645 and atmega6450.
index a00e3b1..6ea3303 100644 (file)
@@ -4545,6 +4545,32 @@ avr_handle_fndecl_attribute (tree *node, tree name,
               IDENTIFIER_POINTER (name));
       *no_add_attrs = true;
     }
+  else
+    {
+      const char *func_name = IDENTIFIER_POINTER (DECL_NAME (*node));
+      const char *attr = IDENTIFIER_POINTER (name);
+
+      /* If the function has the 'signal' or 'interrupt' attribute, test to
+         make sure that the name of the function is "__vector_NN" so as to
+         catch when the user misspells the interrupt vector name.  */
+
+      if (strncmp (attr, "interrupt", strlen ("interrupt")) == 0)
+        {
+          if (strncmp (func_name, "__vector", strlen ("__vector")) != 0)
+            {
+              warning ("`%s' appears to be a misspelled interrupt handler",
+                       func_name);
+            }
+        }
+      else if (strncmp (attr, "signal", strlen ("signal")) == 0)
+        {
+          if (strncmp (func_name, "__vector", strlen ("__vector")) != 0)
+            {
+              warning ("`%s' appears to be a misspelled signal handler",
+                       func_name);
+            }
+        }
+    }
 
   return NULL_TREE;
 }