[Mesa-dev] [PATCH mesa 2/6] nouveau: silence paranoid compiler's -Wclass-memaccess

Eric Engestrom eric.engestrom at intel.com
Sat Sep 22 15:33:30 UTC 2018


On Saturday, 2018-09-22 10:27:50 -0400, Jan Vesely wrote:
> The warning is correct. In the first case, memset tries to zero "Target"
> object which has a non-trivial constructor and non-trivial
> copy-constructor. The original code is broken in the way it mixes C and C++
> initialization and the patch only papers over the issue.
> The correct fix would be to provide a proper constructor for structs that
> include instances of C++ classes.

Thanks for the analysis here, I'll drop these memaccess patches.
The correct fix is beyond what I'm willing to do though, so I'll let
someone else fix them :)

> 
> Jan
> 
> On Sat, Sep 22, 2018 at 6:43 AM Karol Herbst <kherbst at redhat.com> wrote:
> 
> > yeah, I agree here. Either the code was wrong in the first place,
> > which means it would have to be fixed properly or the warning is
> > wrong. The proper fix here is that GCC should detect itself if it's
> > safe to do or not, otherwise that warning becomes a "might be a
> > problem" thing which doesn't help at all. Either it is wrong, or it
> > isn't. And gcc should be able to know in this case.
> >
> > On Sat, Sep 22, 2018 at 6:07 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> > > Based on the various fixes, warning seems bogus -- is the proper
> > > solution -Wno-class-memaccess? (Or however one disables such
> > > things...)
> > >
> > > On Fri, Sep 21, 2018 at 9:50 AM, Eric Engestrom
> > > <eric.engestrom at intel.com> wrote:
> > >> Signed-off-by: Eric Engestrom <eric.engestrom at intel.com>
> > >> ---
> > >>  src/gallium/drivers/nouveau/codegen/nv50_ir.cpp        | 2 +-
> > >>  src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp | 2 +-
> > >>  2 files changed, 2 insertions(+), 2 deletions(-)
> > >>
> > >> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
> > b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
> > >> index 49425b98b9137058c986..62ebc2d24069b7b5f523 100644
> > >> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
> > >> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
> > >> @@ -905,7 +905,7 @@ Instruction::isCommutationLegal(const Instruction
> > *i) const
> > >>  TexInstruction::TexInstruction(Function *fn, operation op)
> > >>     : Instruction(fn, op, TYPE_F32)
> > >>  {
> > >> -   memset(&tex, 0, sizeof(tex));
> > >> +   memset(static_cast<void*>(&tex), 0, sizeof(tex));
> > >>
> > >>     tex.rIndirectSrc = -1;
> > >>     tex.sIndirectSrc = -1;
> > >> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
> > b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
> > >> index 9193a01f189874a7fb38..b6b9b42964bec670079c 100644
> > >> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
> > >> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
> > >> @@ -454,7 +454,7 @@ CodeEmitter::addInterp(int ipa, int reg, FixupApply
> > apply)
> > >>        if (!fixupInfo)
> > >>           return false;
> > >>        if (n == 0)
> > >> -         memset(fixupInfo, 0, sizeof(FixupInfo));
> > >> +         memset(static_cast<void*>(fixupInfo), 0, sizeof(FixupInfo));
> > >>     }
> > >>     ++fixupInfo->count;
> > >>
> > >> --
> > >> Cheers,
> > >>   Eric
> > >>
> > >> _______________________________________________
> > >> mesa-dev mailing list
> > >> mesa-dev at lists.freedesktop.org
> > >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >


More information about the mesa-dev mailing list