attr-noinline.c, [...]: New tests.
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 18 Oct 2001 18:29:25 +0000 (18:29 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Thu, 18 Oct 2001 18:29:25 +0000 (18:29 +0000)
* gcc.dg/attr-noinline.c, gcc.dg/attr-used.c: New tests.
* gcc.dg/attr-invalid.c: Likewise.

From-SVN: r46335

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/attr-invalid.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-noinline.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-used.c [new file with mode: 0644]

index b05c655442f85428998e7b9b44750ece39b156af..ba9ae2a9386eea67f60a7f296bb5d306e55de9bf 100644 (file)
@@ -1,3 +1,8 @@
+2001-10-18  Alexandre Oliva  <aoliva@redhat.com>
+
+       * gcc.dg/attr-noinline.c, gcc.dg/attr-used.c: New tests.
+       * gcc.dg/attr-invalid.c: Likewise.
+
 2001-10-18  Jakub Jelinek  <jakub@redhat.com>
 
        * testsuite/gcc.dg/20011015-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/attr-invalid.c b/gcc/testsuite/gcc.dg/attr-invalid.c
new file mode 100644 (file)
index 0000000..768921d
--- /dev/null
@@ -0,0 +1,56 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+#define CONCAT_(A,B) A ## B
+#define CONCAT(A,B) CONCAT_(A,B)
+
+#define ATTR __attribute__((AT))
+#define ATSYM(suf) CONCAT (AT, CONCAT_ (_, suf))
+
+#define AT noinline
+
+typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+struct ATSYM(struct) {
+  char dummy ATTR; /* { dg-warning "attribute ignored" "" } */
+} ATTR; /* { dg-warning "does not apply to types" "" } */
+
+int ATSYM(var) ATTR;  /* { dg-warning "attribute ignored" "" } */
+
+int ATSYM(fn_knrarg) (arg)
+  int arg ATTR; /* { dg-warning "attribute ignored" "" } */
+{}
+
+int ATSYM(fn_isoarg) (int arg ATTR) {} /* { dg-warning "attribute ignored" "" } */
+
+int ATSYM(fn_vars) (void) {
+  static int svar ATTR; /* { dg-warning "attribute ignored" "" } */
+  auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */
+}
+
+
+#undef AT
+#define AT used
+
+typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+struct ATSYM(struct) {
+  char dummy ATTR; /* { dg-warning "attribute ignored" "" } */
+} ATTR; /* { dg-warning "does not apply to types" "" } */
+
+int ATSYM(var) ATTR;  /* { dg-warning "attribute ignored" "" } */
+
+int ATSYM(fn_knrarg) (arg)
+  int arg ATTR; /* { dg-warning "attribute ignored" "" } */
+{}
+
+int ATSYM(fn_isoarg) (int arg ATTR) {} /* { dg-warning "attribute ignored" "" } */
+
+int ATSYM(fn_vars) (void) {
+  static int svar ATTR; /* { dg-warning "attribute ignored" "" } */
+  auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */
+}
diff --git a/gcc/testsuite/gcc.dg/attr-noinline.c b/gcc/testsuite/gcc.dg/attr-noinline.c
new file mode 100644 (file)
index 0000000..903959e
--- /dev/null
@@ -0,0 +1,66 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -finline-functions" } */
+
+static inline void __attribute__((__noinline__)) function_definition(void) {} /* { dg-warning "inline function \[^\n\]* given attribute noinline" "" } */
+
+static inline void __attribute__((__noinline__)) function_declaration_both_before(void); /* { dg-warning "inline function \[^\n\]* given attribute noinline" "" } */
+
+static void function_declaration_both_before(void) {}
+
+static void function_declaration_both_after(void);
+
+static inline void __attribute__((__noinline__)) function_declaration_both_after(void); /* { dg-warning "(inline function \[^\n\]* given attribute noinline|declared inline after its definition)" "" } */
+
+static void function_declaration_both_after(void) {}
+
+static void function_declaration_noinline_before(void) __attribute__((__noinline__)); /* { dg-warning "previous declaration \[^\n\]* with attribute noinline" "" } */
+
+static inline void function_declaration_noinline_before(void) {} /* { dg-warning "function \[^\n\]* redeclared as inline" "" } */
+
+static inline void function_declaration_noinline_after(void) {} /* { dg-warning "previous declaration \[^\n\]* was inline" "" } */
+
+static void function_declaration_noinline_after(void) __attribute__((__noinline__)); /* { dg-warning "function \[^\n\]* redeclared with attribute noinline" "" } */
+
+static inline void function_declaration_inline_before(void); /* { dg-warning "previous declaration \[^\n\]* was inline" "" } */
+
+static void __attribute__((__noinline__)) function_declaration_inline_before(void) {} /* { dg-warning "function \[^\n\]* redeclared with attribute noinline" "" } */
+
+static inline void function_declaration_inline_noinline_before(void); /* { dg-warning "previous declaration \[^\n\]* was inline" "" } */
+
+static void function_declaration_inline_noinline_before(void) __attribute__((__noinline__)); /* { dg-warning "function \[^\n\]* redeclared with attribute noinline" "" } */
+
+static void function_declaration_inline_noinline_before(void) {}
+
+static inline void function_declaration_inline_noinline_after(void);
+
+static void function_declaration_inline_noinline_after(void) {} /* { dg-warning "previous declaration \[^\n\]* was inline" "" } */
+
+static void function_declaration_inline_noinline_after(void) __attribute__((__noinline__)); /* { dg-warning "function \[^\n\]* redeclared with attribute noinline" "" } */
+
+static void function_declaration_noinline_inline_before(void) __attribute__((__noinline__)); /* { dg-warning "previous declaration\[^\n\]* with attribute noinline" "" } */
+
+static inline void function_declaration_noinline_inline_before(void); /* { dg-warning "function \[^\n\]* redeclared as inline" "" } */
+
+static void function_declaration_noinline_inline_before(void) {}
+
+int f () {
+  function_definition ();
+  function_declaration_both_before ();
+  function_declaration_both_after ();
+  function_declaration_noinline_before ();
+  function_declaration_noinline_after ();
+  function_declaration_inline_before ();
+  function_declaration_inline_noinline_before ();
+  function_declaration_inline_noinline_after ();
+  function_declaration_noinline_inline_before ();
+}
+
+/* { dg-final { scan-assembler "function_definition" } } */
+/* { dg-final { scan-assembler "function_declaration_both_before" } } */
+/* { dg-final { scan-assembler "function_declaration_both_after" } } */
+/* { dg-final { scan-assembler "function_declaration_noinline_before" } } */
+/* { dg-final { scan-assembler "function_declaration_noinline_after" } } */
+/* { dg-final { scan-assembler "function_declaration_inline_before" } } */
+/* { dg-final { scan-assembler "function_declaration_inline_noinline_before" } } */
+/* { dg-final { scan-assembler "function_declaration_inline_noinline_after" } } */
+/* { dg-final { scan-assembler "function_declaration_noinline_inline_before" } } */
diff --git a/gcc/testsuite/gcc.dg/attr-used.c b/gcc/testsuite/gcc.dg/attr-used.c
new file mode 100644 (file)
index 0000000..ba7705a
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+static void function_declaration_before(void) __attribute__((__used__));
+
+static void function_declaration_before(void) {}
+
+static void function_declaration_after(void) {}
+
+static void function_declaration_after(void) __attribute__((__used__));
+
+/* { dg-final { scan-assembler "function_declaration_before" } } */
+/* { dg-final { scan-assembler "function_declaration_after" } } */