Rob I can't see anything in flight from François in gerrit
Peter On 2019-07-05, 3:31 PM, "lustre-discuss on behalf of Latham, Robert J." <[email protected] on behalf of [email protected]> wrote: On Wed, 2017-03-22 at 12:12 +0000, Dilger, Andreas wrote: > On Mar 21, 2017, at 15:53, François Tessier <[email protected]> wrote: > > > > Hi Andreas, > > > > I removed the "static_cast" and casted the __u16 to an enum > > changelog_rec_flags as suggested. It seems to work (see patch > > attached). > > Do you have a test to run to try this out? > > Hi François, > thanks for the patch. > > Could you please submit it directly to Gerrit? Instructions for this > are at: > https://wiki.hpdd.intel.com/display/PUB/Using+Gerrit > https://wiki.hpdd.intel.com/display/PUB/Commit+Comments I ran into this problem today (buiding lustre_user.h with a c++ compiler). Do you know if François submitted this before he changed jobs? If he has not submitted it, I can do it, but if it's already in the system I din't want to add more noise. ==rob > Please feel free to ask here if you have any questions. Note that > you need to add a > Signed-off-by: line for contributions to Lustre and other open source > projects. > > Once the patch is submitted to Gerrit, it will automatically be built > on a variety of > distros and kernels, and if that passes it will be tested with > several configs as well. > > Since this is just a patch that affects the building of the code and > not any functionality, > please add the following line to your commit comment, just before the > Signed-off-by: line: > > Test-Parameters: trivial > > so that it will only do minimal testing. > > Cheers, Andreas > > > On 03/19/2017 12:35 PM, Dilger, Andreas wrote: > > > Unfortunately, that is not something we could include into the C > > > header, since it would break compilation. > > > > > > What about just casting the __u16 to an enum changelog_rec_flags > > > as needed, and declaring the local variables as the enum instead > > > of an int? > > > > > > Failing that, if you don't need the ChangeLog support, we could > > > #ifdef out that section of the header when compiling with > > > __cplusplus so that at least the rest of the header is usable. > > > > > > Cheers, Andreas > > > > > > > On Mar 16, 2017, at 09:17, François Tessier <[email protected]> > > > > wrote: > > > > > > > > Here is the workaround I found (based on static_cast<>()): > > > > > > > > - make a local copy of lustre_user.h and lustreapi.h > > > > - apply the attached patch on lustre_user.h > > > > - add an include parameter in your CXXFLAGS pointing to these > > > > files > > > > - compile with CC > > > > > > > > It's clearly not the best solution but it's a working temporary > > > > band-aid... > > > > > > > > ++ > > > > > > > > François > > > > > > > > > > > > > On 03/16/2017 07:44 AM, François Tessier wrote: > > > > > > On 03/15/2017 05:50 PM, Dilger, Andreas wrote: > > > > > > > On Mar 15, 2017, at 15:22, François Tessier < > > > > > > > [email protected]> wrote: > > > > > > > I get the same errors with g++ (v. 6.3). I can't find > > > > > > > what kind of compiler flag I can use to be able to > > > > > > > compile this. It clearly comes from how C++ deals with > > > > > > > enum. The solutions I've found consist in > > > > > > > "static_casting" the int values... Modifying my local > > > > > > > version of lustre_user.h is probably not the best idea :- > > > > > > > ) > > > > > > > > > > > > Have you tried adding the standard wrappers at the start > > > > > > and end of the lustre_user.h header: > > > > > > > > > > > > #ifdef __cplusplus > > > > > > extern "C" { > > > > > > #endif > > > > > > : > > > > > > <rest of header> > > > > > > #ifdef __cplusplus > > > > > > } > > > > > > #endif > > > > > > > > > > > > I thought we had added those long ago, but I don't see them > > > > > > in the header today. If that fixes your problem, please > > > > > > file an LU ticket at https://jira.hpdd.intel.com/ (and > > > > > > ideally a patch at https://review.whamcloud.com/ too) and > > > > > > we can get this added to the header. > > > > > > > > > > > > In the meantime, you could also wrap your "#include > > > > > > <lustre/lustre_user.h>" similarly. > > > > > > > > > > It doesn't fix the problem. I tried a more recent version of > > > > > g++ or > > > > > several compiler options to force the use of C++11 [1] but > > > > > with no success. > > > > > > Cheers, Andreas > > > > > > > > > > Cheers, > > > > > François > > > > > > > > > > [1] > > > > > http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf > > > > > > > > On 03/15/2017 02:14 PM, Patrick Farrell wrote: > > > > > > > > It looks like your compiler is being fussier than the C > > > > > > > > compiler. > > > > > > > > > > > > > > > > Specifically, the problem appears to be with the enum > > > > > > > > type. The C compiler is happy to let pass using a > > > > > > > > short (cr_flags) where an enum is called for (argument > > > > > > > > to changelog_rec_offset). In C, I think an enum is an > > > > > > > > int (so passing in a short like this is always > > > > > > > > fine). I guess in C++ either enum is not an int, or > > > > > > > > it's just fussier. > > > > > > > > > > > > > > > > There might be a compiler flag to make it not error on > > > > > > > > this? I am not familiar with icpc, so I can't help > > > > > > > > with specifics. > > > > > > > > > > > > > > > > You might also try a different C++ compiler, to see if > > > > > > > > it has a different attitude towards that error. > > > > > > > > > > > > > > > > One further thought, though: > > > > > > > > This is a C header. Presumably, it is not intended to > > > > > > > > be included directly in a C++ project? > > > > > > > > > > > > > > > > - Patrick > > > > > > > > From: lustre-discuss < > > > > > > > > [email protected]> on behalf of > > > > > > > > François Tessier <[email protected]> > > > > > > > > Sent: Wednesday, March 15, 2017 2:00:31 PM > > > > > > > > To: [email protected] > > > > > > > > Subject: [lustre-discuss] Compile a C++ app. using the > > > > > > > > Lustre API > > > > > > > > > > > > > > > > Hi All, > > > > > > > > > > > > > > > > I'm working on a piece of code using the Lustre API. To > > > > > > > > do so, I include > > > > > > > > lustreapi.h. When I compile my code with a C compiler > > > > > > > > (icc), everything > > > > > > > > is fine. However, when I compile it with a C++ compiler > > > > > > > > (icpc), I get > > > > > > > > these errors: > > > > > > > > > > > > > > > > --------------------------------- > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(914): error: argument > > > > > > > > of type "__u16={unsigned short}" is incompatible with > > > > > > > > parameter of type "changelog_rec_flags" > > > > > > > > return changelog_rec_offset(rec->cr_flags); > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(925): error: a value > > > > > > > > of type "int" cannot be used to initialize an entity of > > > > > > > > type "changelog_rec_flags" > > > > > > > > enum changelog_rec_flags crf = rec->cr_flags & > > > > > > > > CLF_VERSION; > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(935): error: a value > > > > > > > > of type "int" cannot be used to initialize an entity of > > > > > > > > type "changelog_rec_flags" > > > > > > > > enum changelog_rec_flags crf = rec->cr_flags & > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(945): error: argument > > > > > > > > of type "int" is incompatible with parameter of type > > > > > > > > "changelog_rec_flags" > > > > > > > > return (char *)rec + changelog_rec_offset(rec- > > > > > > > > >cr_flags & > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(986): error: this > > > > > > > > operation on an enumerated type requires an applicable > > > > > > > > user-defined operator function > > > > > > > > crf_wanted &= CLF_SUPPORTED; > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(997): error: argument > > > > > > > > of type "int" is incompatible with parameter of type > > > > > > > > "changelog_rec_flags" > > > > > > > > changelog_rec_offset(crf_wanted & > > > > > > > > ~CLF_JOBID); > > > > > > > > ^ > > > > > > > > > > > > > > > > In file included from > > > > > > > > /usr/include/lustre/lustreapi.h(47), > > > > > > > > from topo.c(5): > > > > > > > > /usr/include/lustre/lustre_user.h(999): error: argument > > > > > > > > of type "int" is incompatible with parameter of type > > > > > > > > "changelog_rec_flags" > > > > > > > > changelog_rec_offset(crf_wanted & > > > > > > > > ~(CLF_JOBID | CLF_RENAME)); > > > > > > > > ^ > > > > > > > > > > > > > > > > Makefile:10: recipe for target 'topo' failed > > > > > > > > make: *** [topo] Error 2 > > > > > > > > > > > > > > > > --------------------------------- > > > > > > > > > > > > > > > > It's probably more a compiler issue than a Lustre one > > > > > > > > but a solution > > > > > > > > could help other users or Lustre developers. > > > > > > > > > > > > > > > > Any idea? > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > François > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > -- > > > > > > > > François TESSIER, Ph.D. > > > > > > > > Postdoctoral Appointee > > > > > > > > Argonne National Laboratory > > > > > > > > LCF Division - Bldg 240, 4E 19 > > > > > > > > Tel : +1 (630)-252-5068 > > > > > > > > http://www.francoistessier.info > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > lustre-discuss mailing list > > > > > > > > [email protected] > > > > > > > > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org > > > > > > > > > > > > > > _______________________________________________ > > > > > > > lustre-discuss mailing list > > > > > > > [email protected] > > > > > > > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org > > > > > > > > > > > > Cheers, Andreas > > > > > > -- > > > > > > Andreas Dilger > > > > > > Lustre Principal Architect > > > > > > Intel Corporation > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > lustre-discuss mailing list > > > > > [email protected] > > > > > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org > > > > > > > > <lustre_user_cxx.patch> > > > > _______________________________________________ > > > > lustre-discuss mailing list > > > > [email protected] > > > > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org > > > > <lustre_user_cxx.patch> > > Cheers, Andreas > -- > Andreas Dilger > Lustre Principal Architect > Intel Corporation > > > > > > > > _______________________________________________ > lustre-discuss mailing list > [email protected] > http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org _______________________________________________ lustre-discuss mailing list [email protected] http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org _______________________________________________ lustre-discuss mailing list [email protected] http://lists.lustre.org/listinfo.cgi/lustre-discuss-lustre.org
