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

Karol Herbst kherbst at redhat.com
Sun Sep 23 11:09:09 UTC 2018


yeah, you are right, overlooked that "Target target;" inside the inner
"tex" struct.

On Sat, Sep 22, 2018 at 4:27 PM, Jan Vesely <jan.vesely at rutgers.edu> 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.
>
> 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