mono / libgdiplus

C-based implementation of the GDI+ API
http://www.mono-project.com/
MIT License
329 stars 171 forks source link

No longer compiles due to googletest changes. #743

Open AphidGit opened 1 year ago

AphidGit commented 1 year ago

Issue: This no longer compiles correctly. Issue is in the imported googletest which is not version-bound. Some changes in this external code have made it incompatible with this repo's makefile/autotools thingamajig.

A test was added that does something to blow up the compiler; specifically this bit of code;

static void StackLowerThanAddress(const void* ptr,
                                  bool* result) GTEST_NO_INLINE_;
// HWAddressSanitizer add a random tag to the MSB of the local variable address,
// making comparison result unpredictable.
GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_
static void StackLowerThanAddress(const void* ptr, bool* result) {
  int dummy;
  *result = (&dummy < ptr);
}

// Make sure AddressSanitizer does not tamper with the stack here.
GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_
GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_
static bool StackGrowsDown() {
  int dummy;
  bool result;
  StackLowerThanAddress(&dummy, &result);
  return result;
}
#  endif  // GTEST_HAS_CLONE

Dummy is filled with the current stack pointer to check that the stack grows downward or upward (i.e. what do the memory addresses do, increase or decrease?). The compiler does not like this uninitialized pointer use when used with default settings including -wError=maybe-unitialized . This option needs to be turned off to compile googletest (and probably results in more errors; i.e. set -Wno-error-maybe-uninitialized). Haven't been able to test any further because autotools is so impenetrably complicated.

akoeplinger commented 1 year ago

Hm this is weird since we use the submodule at a specific commit so it shouldn't suddenly change. How did you initialize the submodule? Can you show the output of git status in the repo?

pyrates999 commented 11 months ago

On ubuntu 22.04 LTS, here's how I fixed it:

wget https://github.com/google/googletest/archive/refs/tags/release-1.12.1.tar.gz; \
tar xf release-1.12.1.tar.gz; \
rm -rf libgdiplus-6.1/external/googletest/*; \
cp -rfpd googletest-release-1.12.1/* host-mono/libgdiplus-6.1/external/googletest/

Releases 1.13.x and later will not work due to C++14 being required.

mirh commented 1 month ago

https://github.com/mono/libgdiplus/issues/737 https://gitlab.winehq.org/wine-mono/libgdiplus/-/commit/10f2b16a9ff2731493a721630ae12eaf554eec4c