Fix gcc2 build on Mac OS X Lion.
The gcc2 cross-compiler built on Mac OS X Lion has a bug in it where it is erroring with 'cast specifies signature type' when assigning 0 or NULL to a pointer to a member fuction. NULL in this instance is correctly converted to 0 since it is illegal to assign ((void*)0) to a pointer to a member function. However, it should be legal to assign 0 to a pointer to a member function. Thus, there is a bug. Since I can't fix the gcc2 compiler I am working around this bug by assigning the pointer to a do nothing function instead. My host compiler version is i686-apple-darwin11-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3) The same error occurs using the default gcc-llvm compiler and a standard gcc 4.61 built from source. This bug does not occur on Mac OS X 10.6 gcc2 or gcc4, nor does it occur on Mac OS X 10.7 with the gcc4 cross-compiler. If and when we decide to finally leave gcc2 behind we can revert this change.
This commit is contained in:
@@ -102,6 +102,14 @@ protected:
|
|||||||
void SetupErrorBuffer(int x, int y, int width);
|
void SetupErrorBuffer(int x, int y, int width);
|
||||||
void DitherFloydSteinberg(uchar* destination,
|
void DitherFloydSteinberg(uchar* destination,
|
||||||
const uchar* source, int x, int y, int width);
|
const uchar* source, int x, int y, int width);
|
||||||
|
// Do nothing method to get around a bug in
|
||||||
|
// the gcc2 cross-compiler built on Mac OS X
|
||||||
|
// Lion where a compiler error occurs when
|
||||||
|
// assigning a member function pointer to NULL
|
||||||
|
// or 0: cast specifies signature type.
|
||||||
|
// However, this should be legal according to
|
||||||
|
// the C++03 standard.
|
||||||
|
void DitherNone(uchar*, const uchar*, int, int, int) {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum {
|
enum {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
Resampler::Resampler(uint32 src_format, uint32 dst_format)
|
Resampler::Resampler(uint32 src_format, uint32 dst_format)
|
||||||
:
|
:
|
||||||
fFunc(0)
|
fFunc(&Resampler::no_conversion)
|
||||||
{
|
{
|
||||||
if (dst_format == media_raw_audio_format::B_AUDIO_FLOAT) {
|
if (dst_format == media_raw_audio_format::B_AUDIO_FLOAT) {
|
||||||
switch (src_format) {
|
switch (src_format) {
|
||||||
@@ -81,7 +81,7 @@ Resampler::~Resampler()
|
|||||||
status_t
|
status_t
|
||||||
Resampler::InitCheck() const
|
Resampler::InitCheck() const
|
||||||
{
|
{
|
||||||
return fFunc != 0 ? B_OK : B_ERROR;
|
return fFunc != &Resampler::no_conversion ? B_OK : B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,15 @@ private:
|
|||||||
int32 srcSampleOffset, int32 srcSampleCount,
|
int32 srcSampleOffset, int32 srcSampleCount,
|
||||||
void* dest, int32 destSampleOffset,
|
void* dest, int32 destSampleOffset,
|
||||||
int32 destSampleCount, float gain);
|
int32 destSampleCount, float gain);
|
||||||
|
// Do nothing method to get around a bug in
|
||||||
|
// the gcc2 cross-compiler built on Mac OS X
|
||||||
|
// Lion where a compiler error occurs when
|
||||||
|
// assigning a member function pointer to NULL
|
||||||
|
// or 0: cast specifies signature type.
|
||||||
|
// However, this should be legal according to
|
||||||
|
// the C++03 standard.
|
||||||
|
void no_conversion(const void*, int32, int32, void*,
|
||||||
|
int32, int32, float) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ Halftone::Halftone(color_space colorSpace, double gamma, double min,
|
|||||||
fDither = &Halftone::DitherRGB32;
|
fDither = &Halftone::DitherRGB32;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fDither = NULL;
|
fDither = &Halftone::DitherNone;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -364,4 +364,3 @@ Halftone::DitherFloydSteinberg(uchar *destination, const uchar* source0,
|
|||||||
*destination = ConvertUsingBlackValue(cur);
|
*destination = ConvertUsingBlackValue(cur);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user