On Jan 17, 2014, at 12:44 PM, Paul Hargrove <phhargr...@lbl.gov> wrote:
> Ralph, > > I might be the most active lurker on Earth, but I am still that: an > individual outside the OMPI core developers who follows the devel list. So, > excepting bugs that cause me actual harm (and this is NOT one) I am usually > happy to defer to the core developers. > > As I just sent in response to Larry Baker, I've determined that PGI is > warning about (const char *) arguments passed to varargs functions, which > seems to me to be a bug (how can you claim to be type checking arguments > against "..."). > So, I vote for ignore. > > And just to close the issue you raised earlier (the last 3 instances not > involving const char *): > I *did* find the last three instances to all involve passing a (const char *): > state_base_fns.c: orte_job_state_to_str() returns a const-qualified value > (the only tricky case). > plm_rsh_component.c: parameter 'agent_list' is const-qualified > plm_rsh_module.c: parameter 'agent' is const-qualified. Ah, I missed that - thanks! > > Adding casts to string literals did NOT change or eliminate the warnings. Good to know > > -Paul > > > On Fri, Jan 17, 2014 at 12:27 PM, Ralph Castain <r...@open-mpi.org> wrote: > Hmmm...I hate chasing compiler bugs, and since this is only a warning, I > would tend to defer making changes and just let folks push on PGI to fix > their bug. > > Anyone object to that strategy? > > > On Jan 17, 2014, at 12:04 PM, Paul Hargrove <phhargr...@lbl.gov> wrote: > >> Larry, >> >> So, if I follow your report correctly is is probably the "static" (not the >> "const") property of the string literals' type that leads pgcc to warn. If >> that is the case, then I agree that this is NOT a warning that is consistent >> with the C standard's rules for type compatibility. Thus I agree that it is >> probably a PGI bug. >> >> Ralph, >> >> If we determine that these warnings are the product of a PGI bug, but one >> can silence them with a cast, then how do you want to proceed? I can >> probably sort out all four combinations of static and const qualified char* >> pretty quickly (once I get the chance). >> >> -Paul >> >> >> On Fri, Jan 17, 2014 at 11:44 AM, Larry Baker <ba...@usgs.gov> wrote: >> Paul, >> >> From what I can see in the arguments to OPAL_OUTPUT_VERBOSE() in line 356 at >> https://bitbucket.org/ompiteam/ompi-svn-mirror/src/f48eeda443104a64dc89e4f5fab4c940e44d8615/opal/mca/db/hash/db_hash.c, >> this is the same PGI bug I reported 22 Jul 2010, which was assigned TPR >> 17139. >> >> >>> Customer information: >>> >>> Larry Baker >>> US Geological Survey >>> 650-329-5608 >>> ba...@usgs.gov >>> >>> Product: 2183-WS >>> PIN: 507549 >>> >>> Problem description: >>> >>> I am trying to track down the warnings that occur when compiling the UCAR >>> NetCDF package with PGI compilers. I have found a case that gcc does not >>> warn about, but pgcc does. If I understand the code and the C (1990) >>> standard, I think pgcc is complaining too much. >>> >>> You can reproduce the warnings by downloading the UCAR NetCDF source >>> package, netcdf.tar.gz, fromhttp://www.unidata.ucar.edu/software/netcdf/. >>> Assuming you download it to /usr/local/src, here are the commands that >>> illustrate the warnings: >>> >>> # cd /usr/local/src >>> # tar -xzf netcdf.tar.gz >>> # cd netcdf-4.1.1 >>> # ./configure >/dev/null 2>&1 >>> # cd ncgen >>> # pgcc -DHAVE_CONFIG_H -I. -I.. -I../fortran -I.. -I../libsrc >>> -I../libsrc -g -O2 -tp amd64 -Msignextend -DNO_PGI_OFFSET -c -o genf77.o >>> genf77.c >>> PGC-W-0095-Type cast required for this conversion (genf77.c: 498) >>> PGC-W-0095-Type cast required for this conversion (genf77.c: 511) >>> PGC/x86-64 Linux 10.3-0: compilation completed with warnings >>> >>> To eliminate the warnings, I had to modify the two source lines to cast the >>> result from static const char* f77varncid() as (char *): >>> >>>> /* Use the specialized put_att_XX routines if possible*/ >>>> switch (basetype->typ.typecode) { >>>> case NC_BYTE: >>>> case NC_SHORT: >>>> case NC_INT: >>>> case NC_FLOAT: >>>> case NC_DOUBLE: >>>> f77attrify(asym,code); >>>> codedump(code); >>>> bbClear(code); >>>> bbprintf0(stmt,"stat = nf_put_att_%s(ncid, %s, %s, %s, %lu, >>>> %sval)\n", >>>> nfstype(basetype->typ.typecode), >>>> (asym->att.var == NULL?"NF_GLOBAL" >>>> :(char *) f77varncid(asym->att.var)), >>>> <--- here >>>> f77escapifyname(asym->name), >>>> nftype(basetype->typ.typecode), >>>> len, >>>> ncftype(basetype->typ.typecode)); >>>> codedump(stmt); >>>> break; >>>> >>>> case NC_CHAR: >>>> len = bbLength(code); >>>> f77quotestring(code); >>>> bbprintf0(stmt,"stat = nf_put_att_text(ncid, %s, %s, %lu, ", >>>> (asym->att.var == NULL?"NF_GLOBAL" >>>> :(char *)f77varncid(asym->att.var)), >>>> <--- and here >>>> f77escapifyname(asym->name), >>>> (len==0?1:len)); >>>> codedump(stmt); >>>> codedump(code); >>>> codeline(")"); >>>> break; >>> >>> Here is static const char* f77varncid(): >>> >>>> /* Compute the name for a given var's id*/ >>>> /* Watch out: the result is a static*/ >>>> static const char* >>>> f77varncid(Symbol* vsym) >>>> { >>>> const char* tmp1; >>>> char* vartmp; >>>> tmp1 = f77name(vsym); >>>> vartmp = poolalloc(strlen(tmp1)+strlen("_id")+1); >>>> strcpy(vartmp,tmp1); >>>> strcat(vartmp,"_id"); >>>> return vartmp; >>>> } >>> >>> There are other lines in genf77.c that use f77varncid() in a print >>> statement, so the warnings do not occur every time f77varncid() provides a >>> string for %s: >>> >>>> if (nvars > 0) { >>>> f77skip(); >>>> f77comment("variable ids"); >>>> for(ivar = 0; ivar < nvars; ivar++) { >>>> Symbol* vsym = (Symbol*)listget(vardefs,ivar); >>>> bbprintf0(stmt,"integer %s;\n", f77varncid(vsym)); >>>> codedump(stmt); >>>> } >>> >>> The warnings occur in the only two instances where f77varncid() is used in >>> a conditional expression. In both cases, the second operand is a literal >>> string, e.g., "NF_GLOBAL". I would have thought that a (static const >>> char*) and a string literal would be compatible types. I experimented with >>> a (const char *) cast instead of a (char *) cast, but that does not work. >>> I think it should. >>> >>> I admit, I have an old copy of the C standard — from 1990. But, here's my >>> interpretation of what it says about this: >>> >>> • 6.1.4 String literals, says string literals are converted to an array of >>> type char. If the program attempts to modify a string literal, the >>> behavior is undefined. It does not say that the type has the const type >>> qualifier (though, you would think it should). >>> >>> • 6.3.15 Conditional operator, says if the second and third operands are >>> pointers ..., the result type is a pointer to a type qualified with all the >>> type qualifiers of the types pointed-to by both operands. >>> >>> This would seem to explain the warning message, since the string literal is >>> (char *) and f77varncid() is (const char *). However, 6.3.15 goes on to >>> say: >>> >>> Furthermore, if both operands are pointers to ... differently qualified >>> versions of a compatible type, the result has the composite type. >>> >>> Which leads me to believe you are allowed to mix const and non-const >>> versions of a compatible type. >>> >>> Lastly: >>> >>> • 6.5.3 Type qualifiers, says that the properties associated with qualified >>> types are meaningful only for expressions that are lvalues. >>> >>> Seems to make the issue moot, since it says const-ness only applies to >>> lvalues. >>> >>> So, I think both 6.3.15 and 6.5.3 imply that (char *) and (const char *) >>> are compatible as the second and third operands in a conditional expression >>> which is not an lvalue, which is the case in this code. As I mentioned >>> above, gcc does not complain about this code. What do you think? >>> >>> Larry Baker >>> US Geological Survey >>> 650-329-5608 >>> ba...@usgs.gov >> >> I could inquire about the current status of this TPR if you like. (Might as >> well.) >> >> Larry Baker >> US Geological Survey >> 650-329-5608 >> ba...@usgs.gov >> >> >> >> On 17 Jan 2014, at 11:28 AM, Paul Hargrove wrote: >> >>> Ralph, >>> >>> You are probably right that the string literals are a likely cause (type >>> char[] ? ). >>> I will poke at this a bit by adding (char *) casts to see which argument(s) >>> are actually the cause and get back to you. >>> >>> -Paul >>> >>> >>> On Fri, Jan 17, 2014 at 8:56 AM, Ralph Castain <r...@open-mpi.org> wrote: >>> Hi Paul >>> >>> Looking at these, I'm a tad puzzled. It would appear that PGI is >>> complaining about the fixed string being passed in the last three cases as >>> there is no (const char*)foo being used in those areas. Yet we use that >>> same logic elsewhere and your report isn't showing those as warnings. >>> >>> Do you think it is the fixed string that is the issue - or is it the (const >>> char*) variable we need to recast? >>> >>> >>> On Jan 16, 2014, at 11:24 PM, Paul Hargrove <phhargr...@lbl.gov> wrote: >>> >>>> My builds of the trunk with pgcc-13.10 turned up the following warnings: >>>> >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/opal/mca/db/hash/db_hash.c: >>>> 354) >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/opal/mca/db/hash/db_hash.c: >>>> 376) >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/opal/mca/db/hash/db_hash.c: >>>> 452) >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/opal/mca/db/hash/db_hash.c: >>>> 534) >>>> >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/orte/mca/state/base/state_base_fns.c: >>>> 766) >>>> >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/orte/mca/plm/rsh/plm_rsh_component.c: >>>> 368) >>>> >>>> PGC-W-0095-Type cast required for this conversion >>>> (/scratch/scratchdirs/hargrove/OMPI/openmpi-trunk-linux-x86_64-pgi-13.10/openmpi-1.9a1r30302/orte/mca/plm/rsh/plm_rsh_module.c: >>>> 1337) >>>> >>>> I believe all of these are related to passing a (const char *) to >>>> OPAL_OUTPUT_VERBOSE(). >>>> >>>> -Paul >>>> >>>> >>>> -- >>>> Paul H. Hargrove phhargr...@lbl.gov >>>> Future Technologies Group >>>> Computer and Data Sciences Department Tel: +1-510-495-2352 >>>> Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 >>>> _______________________________________________ >>>> devel mailing list >>>> de...@open-mpi.org >>>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >>> >>> >>> -- >>> Paul H. Hargrove phhargr...@lbl.gov >>> Future Technologies Group >>> Computer and Data Sciences Department Tel: +1-510-495-2352 >>> Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >> >> >> >> >> -- >> Paul H. Hargrove phhargr...@lbl.gov >> Future Technologies Group >> Computer and Data Sciences Department Tel: +1-510-495-2352 >> Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/devel > > > _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel > > > > -- > Paul H. Hargrove phhargr...@lbl.gov > Future Technologies Group > Computer and Data Sciences Department Tel: +1-510-495-2352 > Lawrence Berkeley National Laboratory Fax: +1-510-486-6900 > _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel