diff gcc/testsuite/g++.dg/opt/const3.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/opt/const3.C	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,44 @@
+// PR optimization/12926
+// This failed on SPARC64 because the assignments to the bit-fields
+// were wrongly swapped in the constructor.
+
+// { dg-do run }
+// { dg-options "-O2" }
+
+extern "C" void abort(void);
+
+typedef __SIZE_TYPE__ size_t;
+
+void *my_out;
+
+struct A
+{
+  enum Type {P, U, S};
+
+  int foo1(void *, const char *);
+  int foo2(int, const Type);
+
+  A (const size_t size, const Type type): mSize(size), mType(type)
+  {
+      foo2(foo1(my_out, "type = "), type);
+      foo2(foo1(my_out, "mType = "), mType);
+  }
+
+  const size_t mSize : 8*sizeof(size_t) - 3;
+  Type mType : 2;
+};
+
+int i;
+
+int A::foo1(void *ios, const char *str) { }
+int A::foo2(int v, const Type t) { i=0; }
+
+int main()
+{
+  A testa(2, A::S);
+
+  if (testa.mType != A::S)
+     abort();
+
+  return 0;
+}