* execute/20000223-1.c: New test.
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2000 18:14:28 +0000 (18:14 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Feb 2000 18:14:28 +0000 (18:14 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32117 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/gcc.c-torture/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20000223-1.c [new file with mode: 0644]

index 86fac2e..1c0a9d7 100644 (file)
@@ -1,3 +1,7 @@
+2000-02-23  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * execute/20000223-1.c: New test.
+
 2000-01-27  Jakub Jelinek  <jakub@redhat.com>
 
        * compile/20000127-1.c: New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000223-1.c b/gcc/testsuite/gcc.c-torture/execute/20000223-1.c
new file mode 100644 (file)
index 0000000..db6180b
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+   Contributed by Nathan Sidwell 23 Feb 2000 <nathan@codesourcery.com> */
+
+/* __alignof__ should never return a non-power of 2
+   eg, sizeof(long double) might be 12, but that means it must be alignable
+   on a 4 byte boundary. */
+
+void check (char const *type, int align)
+{
+  if ((align & -align) != align)
+    {
+      abort ();
+    }
+}
+
+#define QUOTE_(s) #s
+#define QUOTE(s) QUOTE_(s)
+
+#define check(t) check(QUOTE(t), __alignof__(t))
+
+// This struct should have an alignment of the lcm of all the types. If one of
+// the base alignments is not a power of two, then A cannot be power of two
+// aligned.
+struct A
+{
+  char c;
+  signed short ss;
+  unsigned short us;
+  signed int si;
+  unsigned int ui;
+  signed long sl;
+  unsigned long ul;
+  signed long long sll;
+  unsigned long long ull;
+  float f;
+  double d;
+  long double ld;
+  void *dp;
+  void (*fp)();
+};
+
+int main ()
+{
+  check (void);
+  check (char);
+  check (signed short);
+  check (unsigned short);
+  check (signed int);
+  check (unsigned int);
+  check (signed long);
+  check (unsigned long);
+  check (signed long long);
+  check (unsigned long long);
+  check (float);
+  check (double);
+  check (long double);
+  check (void *);
+  check (void (*)());
+  check (struct A);
+  return 0;
+}