adlc-generated operator= for Pipeline_Use_Cycle_Mask
Florian Weimer
fweimer at redhat.com
Mon Nov 11 15:40:21 UTC 2019
adlc generates an assignment operator for the Pipeline_Use_Cycle_Mask
class, like this:
Pipeline_Use_Cycle_Mask& operator=(const Pipeline_Use_Cycle_Mask &in) {
_mask = in._mask;
return *this;
}
GCC 10 takes this as an indicator that objects of this class should not
be modified with memcpy or memset and issues -Wclass-memaccess warnings:
…/src/hotspot/share/opto/output.cpp: In constructor 'Scheduling::Scheduling(Arena*, Compile&)':
…/src/hotspot/share/opto/output.cpp:1745:108: error: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'class Pipeline_Use_Element' with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Werror=class-memaccess]
1745 | memcpy(_bundle_use_elements, Pipeline_Use::elaborated_elements, sizeof(Pipeline_Use::elaborated_elements));
| ^
In file included from …/src/hotspot/share/opto/ad.hpp:31,
from …/src/hotspot/share/opto/output.cpp:37:
ad_x86.hpp:6196:7: note: 'class Pipeline_Use_Element' declared here
…/src/hotspot/share/opto/output.cpp: In member function 'void Scheduling::step_and_clear()':
…/src/hotspot/share/opto/output.cpp:1797:51: error: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'class Pipeline_Use_Element' with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Werror=class-memaccess]
1797 | sizeof(Pipeline_Use::elaborated_elements));
| ^
Looking at the code generator, it seems that the default assignment
operator will do the right thing in all cases. Can we remove generation
of this C++ code fragment?
Thanks,
Florian
More information about the hotspot-compiler-dev
mailing list