Fix for const ** problem with cross sections.
authorEric Bohm <ebohm@illinois.edu>
Sat, 6 Mar 2010 02:11:15 +0000 (20:11 -0600)
committerEric Bohm <ebohm@illinois.edu>
Sat, 6 Mar 2010 02:11:15 +0000 (20:11 -0600)
const type **thing cannot be initialized dynamically. const type * const * thing is fine.
FYI: type const * const * thing, is arguably best of all in terms of clarity, but the compiler doesn't care about the order of type and const in that syntax.

This fix is necessary for the new version of openatom.

doc/charm++/arrays.tex
src/ck-core/charm++.h
src/ck-core/ckarray.h
src/xlat-i/xi-symbol.C
tests/charm++/megatest/multisectiontest.C

index 7aa667462741849dcf19c3e24ace2d1669f808b5..36947c5e892ba97445c2fe0fae21d977e2338d01 100644 (file)
@@ -1058,8 +1058,7 @@ arrays as follows:
              for(int i=afloor,j=0;i<=aceiling;i++,j++)
                aelems[k][j]=CkArrayIndex1D(i);
            \}
-         const CkArrayIndexMax *constaelems[3]={aelems[0], aelems[1], aelems[2]};
-         CProxySection\_multisectiontest\_array1d arrayLowProxy(3,aidArr,constaelems,naelems);
+         CProxySection\_multisectiontest\_array1d arrayLowProxy(3,aidArr,aelems,naelems);
 \end{alltt}
 
 
index 8dab92637db6e2d0d69445c592476a31907c37e2..a18c3d3099bf10b30c48ef4fd40cf1becae3ae3b 100644 (file)
@@ -915,12 +915,12 @@ public:
   }
   CProxySection_Group(const IrrGroup *g)
       :CProxy_Group(g), _nsid(0) {}
-  CProxySection_Group(const int n, const CkGroupID *gid, const int **elems, const int *nElems)
+  CProxySection_Group(const int n, const CkGroupID *gid,  int const * const *elems, const int *nElems)
       :CProxy_Group(gid[0]), _nsid(n) {
     _sid = new CkSectionID[n];
     for (int i=0; i<n; ++i) _sid[i] = CkSectionID(gid[i], elems[i], nElems[i]);
   }
-  CProxySection_Group(const int n, const CkGroupID *gid, const int **elems, const int *nElems,CK_DELCTOR_PARAM)
+  CProxySection_Group(const int n, const CkGroupID *gid, int const * const *elems, const int *nElems,CK_DELCTOR_PARAM)
       :CProxy_Group(gid[0],CK_DELCTOR_ARGS), _nsid(n) {
     _sid = new CkSectionID[n];
     for (int i=0; i<n; ++i) _sid[i] = CkSectionID(gid[i], elems[i], nElems[i]);
index d1ff3e975a514df3b08ca3e1c46cee39ea6c118d..f426d6b78219dc200d794d07153feb41bc723122 100644 (file)
@@ -449,12 +449,12 @@ public:
         for (int i=0; i<_nsid; ++i) _sid[i] = cs._sid[i];
       } else _sid = NULL;
     }
-    CProxySection_ArrayBase(const int n, const CkArrayID *aid, const CkArrayIndexMax **elems, const int *nElems)
+    CProxySection_ArrayBase(const int n, const CkArrayID *aid, CkArrayIndexMax const * const *elems, const int *nElems)
         :CProxy_ArrayBase(aid[0]), _nsid(n) {
       _sid = new CkSectionID[n];
       for (int i=0; i<n; ++i) _sid[i] = CkSectionID(aid[i], elems[i], nElems[i]);
     }
-    CProxySection_ArrayBase(const int n, const CkArrayID *aid, const CkArrayIndexMax **elems, const int *nElems,CK_DELCTOR_PARAM)
+    CProxySection_ArrayBase(const int n, const CkArrayID *aid, CkArrayIndexMax const * const *elems, const int *nElems,CK_DELCTOR_PARAM)
         :CProxy_ArrayBase(aid[0],CK_DELCTOR_ARGS), _nsid(n) {
       _sid = new CkSectionID[n];
       for (int i=0; i<n; ++i) _sid[i] = CkSectionID(aid[i], elems[i], nElems[i]);
index 00c5b76dcf055e394c68f84664713e3f07529390..4ecc043b9ddba471da6e981b99c7cddf01f7a93f 100644 (file)
@@ -1194,10 +1194,10 @@ Group::genSubDecls(XStr& str)
     str << "    "<<ptype<<"(const CkGroupID &_gid,const int *_pelist,int _npes) : ";
     genProxyNames(str, "", NULL,"(_gid,_pelist,_npes)", ", ");
     str << "{  }\n";
-    str << "    "<<ptype<<"(int n,const CkGroupID *_gid,const int **_pelist,const int *_npes) : ";
+    str << "    "<<ptype<<"(int n,const CkGroupID *_gid, int const * const *_pelist,const int *_npes) : ";
     genProxyNames(str, "", NULL,"(n,_gid,_pelist,_npes)", ", ");
     str << "{  }\n";
-    str << "    "<<ptype<<"(int n,const CkGroupID *_gid,const int **_pelist,const int *_npes,CK_DELCTOR_PARAM) : ";
+    str << "    "<<ptype<<"(int n,const CkGroupID *_gid, int const * const *_pelist,const int *_npes,CK_DELCTOR_PARAM) : ";
     genProxyNames(str, "", NULL,"(n,_gid,_pelist,_npes,CK_DELCTOR_ARGS)", ", ");
     str << "{  }\n";
     
@@ -1498,9 +1498,9 @@ Array::genSubDecls(XStr& str)
          "        :";genProxyNames(str, "",NULL, "(aid,elems,nElems)", ", ");str<<" {}\n";
     str <<"    "<<ptype<<"(const CkSectionID &sid)"
          "       :";genProxyNames(str, "",NULL, "(sid)", ", ");str<< " {}\n";
-       str <<"    "<<ptype<<"(int n, const CkArrayID *aid, const CkArrayIndexMax **elems, const int *nElems, CK_DELCTOR_PARAM) \n"
+       str <<"    "<<ptype<<"(int n, const CkArrayID *aid, CkArrayIndexMax const * const *elems, const int *nElems, CK_DELCTOR_PARAM) \n"
          "        :";genProxyNames(str, "",NULL, "(n,aid,elems,nElems,CK_DELCTOR_ARGS)", ", ");str << " {}\n";
-       str <<"    "<<ptype<<"(int n, const CkArrayID *aid, const CkArrayIndexMax **elems, const int *nElems) \n"
+       str <<"    "<<ptype<<"(int n, const CkArrayID *aid, CkArrayIndexMax const * const *elems, const int *nElems) \n"
          "        :";genProxyNames(str, "",NULL, "(n,aid,elems,nElems)", ", ");str<<" {}\n";
     str <<
     "    static CkSectionID ckNew(const CkArrayID &aid, CkArrayIndexMax *elems, int nElems) {\n"
index 7a67081a6e8d29f131b53e334650021d5ad34b95..74563770af37c032cc8823bd6a3c213fbff3ca1e 100644 (file)
@@ -35,7 +35,6 @@ void multisectiontest_init()
              gidArr[i]=CProxy_multisectiontest_grp::ckNew(numgroups, masterproxy.ckGetGroupID());        
 
            }
-         const CkGroupID constgidArr[NUMGROUPS]={gidArr[0], gidArr[1], gidArr[2]};
          for(int i=0;i<numarrays;i++)
            {
              Aproxy[i]=CProxy_multisectiontest_array1d::ckNew(masterproxy.ckGetGroupID(),ArraySize);     
@@ -66,10 +65,9 @@ void multisectiontest_init()
              for(int i=floor,j=0;i<=ceiling;i++,j++)
                elems[k][j]=i;
            }
-         const int *constelems[NUMGROUPS]={elems[0], elems[1], elems[2]};
          //      CProxySection_multisectiontest_grp
          //      groupLowProxy=CProxySection_multisectiontest_grp(numgroups,gidArr,elems,nelems);
-         CProxySection_multisectiontest_grp groupLowProxy(numgroups, constgidArr,constelems,nelems);
+         CProxySection_multisectiontest_grp groupLowProxy(numgroups, gidArr,elems,nelems);
          //  CkPrintf("[%d] section of groupid %d from %d to %d size
          //  %d\n",CkMyPe(), thisgroup,  floor, ceiling,
          //  sectionSize);
@@ -86,10 +84,11 @@ void multisectiontest_init()
            for(int i=afloor,j=0;i<=aceiling;i++,j++)
              aelems[k][j]=CkArrayIndex1D(i);
            }
-         const CkArrayIndexMax *constaelems[NUMARRAYS]={aelems[0], aelems[1], aelems[2]};
          //      CProxySection_multisectiontest_array1d
          //      arrayLowProxy=CProxySection_multisectiontest_array1d(numarrays,aidArr,aelems,naelems);
-         CProxySection_multisectiontest_array1d arrayLowProxy(numarrays,aidArr,constaelems,naelems);
+         //      CProxySection_multisectiontest_array1d
+         //      arrayLowProxy(numarrays,aidArr,constaelems,naelems);
+         CProxySection_multisectiontest_array1d arrayLowProxy(numarrays,aidArr,aelems,naelems);
          // cross section other half of each group
          floor=0;
          ceiling=boundary-1;
@@ -111,8 +110,7 @@ void multisectiontest_init()
              for(int i=floor,j=0;i<=ceiling;i++,j++)
                elemsH[k][j]=i;           
            }
-         const int *constelemsH[NUMGROUPS]={elemsH[0], elemsH[1], elemsH[2]};
-         CProxySection_multisectiontest_grp groupHighProxy(numgroups,gidArr,constelemsH,nelems);
+         CProxySection_multisectiontest_grp groupHighProxy(numgroups,gidArr,elemsH,nelems);
 
          // cross section upper half of each array
          // cross section lower half of each array
@@ -126,8 +124,7 @@ void multisectiontest_init()
              for(int i=afloor,j=0;i<=aceiling;i++,j++)
                aelemsH[k][j]=CkArrayIndex1D(i);
            }
-         const CkArrayIndexMax *constaelemsH[NUMARRAYS]={aelemsH[0], aelemsH[1], aelemsH[2]};
-         CProxySection_multisectiontest_array1d arrayHighProxy(numarrays,aidArr,constaelemsH,naelems);
+         CProxySection_multisectiontest_array1d arrayHighProxy(numarrays,aidArr, aelemsH, naelems);
 
          // send IDs to master
          multisectionGID_msg *mmsg= new (numgroups) multisectionGID_msg;
@@ -306,8 +303,7 @@ void multisectiontest_grp::recvID( multisectionAID_msg *m)
       for(int i=afloor,j=0;i<=aceiling;i++,j++)
        aelems[k][j]=CkArrayIndex1D(i);
     }
-  const CkArrayIndexMax *constaelems[3]={aelems[0], aelems[1], aelems[2]};
-  multisectionProxy=CProxySection_multisectiontest_array1d(NUMARRAYS,m->IDs,constaelems,naelems);
+  multisectionProxy=CProxySection_multisectiontest_array1d(NUMARRAYS,m->IDs,aelems,naelems);
   delete m;  
   CkCallback cb(CkIndex_multisectiontest_master::doneSetup(NULL), 0,masterGroup);
   contribute(sizeof(int),&msgCount, CkReduction::sum_int,cb);
@@ -406,8 +402,7 @@ void multisectiontest_array1d::recvID(multisectionGID_msg *m)
       for(int i=floor,j=0;i<=ceiling;i++,j++)
        elems[k][j]=i;
     }
-  const int *constelems[3]={elems[0], elems[1], elems[2]};
-  multisectionProxy=CProxySection_multisectiontest_grp(NUMGROUPS,m->IDs,constelems,nelems);
+  multisectionProxy=CProxySection_multisectiontest_grp(NUMGROUPS,m->IDs,elems,nelems);
   delete m;
   CkCallback cb(CkIndex_multisectiontest_master::doneSetup(NULL), 0,masterGroup);
   contribute(sizeof(int),&msgCount, CkReduction::sum_int,cb);