easystroke
easystroke copied to clipboard
Fix a linking problem by moving Stroke::save() and load() into header
The template member functions Stroke::save and Stroke::load get called via the serialize() function generated by boost's macro BOOST_SERIALIZATION_SPLIT_MEMBER() in gesture.h. Since the definitions of save()/load() are only available in gesture.cc, the compiler may produce two versions of Stroke::serialize() -- one with save()/load() inlined in gesture.o and one with calls to save()/load() in all other referencing translation units. Since the compiler inlined Stroke::save() and Stroke::load(), it will not export them in gesture.o (which is legitimate, since the code only requests an export of Stroke::serialize). As a result, some orders of object files can fail to link, when the linker picks the version of Stroke::serialize() that would call save()/load() (which are not available separately) instead of the version with these functions inlined.
Avoid relying on this compiler- and optimization-level dependent behavior by moving the definition of template member functions Stroke::save() and Stroke::load() into gesture.h. As a side-effect, that change unifies code style, since all other classes have their ::save() and ::load() definitions in header files, too.
These link failures surfaced when building on s390x with -march=zEC12 or later, and can be reproduced on x86_64 with gcc parameters --param max-inline-insns-auto=80 --param inline-min-speedup=2
Signed-off-by: Marius Hillenbrand [email protected]
@mhillenibm just wanted to let you know that I've been testing out this PR and it works just fine in my case. I've therefore submitted a gist to the easystroke-git AUR package page so that this gets considered for a future version of the package. Hope that's okay!
Thanks, maybe try also @ https://github.com/berkeleybross/easy-gesture, its an actively maintained fork, 72 Commits ahead.
@bkuri, would be nice if you consider switching the AUR of easystroke to easy-gestures, or kindly ask the current maintainer to do so..