re PR tree-optimization/36187 (Partitioning problem with SFTs (again))
authorRichard Biener <rguenth@gcc.gnu.org>
Fri, 9 May 2008 20:04:57 +0000 (20:04 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 9 May 2008 20:04:57 +0000 (20:04 +0000)
2008-05-09  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/36187
* g++.dg/opt/pr36187.C: New testcase.

From-SVN: r135126

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

index f6c39eae0688528e18c7ad6851e2cf0850da1dac..531df9fe646dbefdb7ec2cfde9e5899ed56b3437 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;
+}