2008-05-09 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 May 2008 20:04:57 +0000 (20:04 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 May 2008 20:04:57 +0000 (20:04 +0000)
PR tree-optimization/36187
* g++.dg/opt/pr36187.C: New testcase.

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

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr36187.C [new file with mode: 0644]

index f6c39ea..531df9f 100644 (file)
@@ -1,4 +1,9 @@
-2008-01-08  Jan Sjodin  <jan.sjodin@amd.com>
+2008-05-09  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/36187
+       * g++.dg/opt/pr36187.C: New testcase.
+
+2008-05-08  Jan Sjodin  <jan.sjodin@amd.com>
            Sebastian Pop  <sebastian.pop@amd.com>
 
        * gcc.dg/tree-ssa/data-dep-1.c: New.
diff --git a/gcc/testsuite/g++.dg/opt/pr36187.C b/gcc/testsuite/g++.dg/opt/pr36187.C
new file mode 100644 (file)
index 0000000..fdb468d
--- /dev/null
@@ -0,0 +1,45 @@
+/* { dg-do run } */
+/* { dg-options "-O2 --param max-aliased-vops=20" } */
+
+extern "C" void abort (void);
+enum SbxDataType { SbxINTEGER, SbxDECIMAL, SbxBYREF = 0x4000 };
+struct SbxValues {
+    union {
+       float nSingle;
+       float* pSingle;
+    };
+    SbxDataType eType;
+};
+static bool ImpPutDoubleFoo( SbxValues* p)
+{
+    bool bRet = false;
+    SbxValues aTmp;
+    int count = 0;
+start: 
+    switch( p->eType )  {  
+       case SbxINTEGER:
+           if (count++ > 0)
+             abort ();
+           aTmp.pSingle = &p->nSingle; goto direct;
+       case SbxBYREF | SbxDECIMAL:
+           bRet = false;
+           break;
+       direct:
+           aTmp.eType = SbxDataType( p->eType | SbxBYREF );
+           p = &aTmp; goto start;
+       case SbxBYREF | SbxINTEGER:
+           break;
+       default:
+           bRet =true;
+    }
+    return bRet;
+}
+
+int main( int argc, char** argv )
+{
+    SbxValues aTmp;
+    aTmp.eType = SbxINTEGER;
+    if ( ImpPutDoubleFoo( &aTmp ) )
+       abort ();
+    return 0;
+}