Merge "Fix weak vtable warnings"
diff --git a/include/binder/IBinder.h b/include/binder/IBinder.h
index 5f1e87c..9097cb3 100644
--- a/include/binder/IBinder.h
+++ b/include/binder/IBinder.h
@@ -90,12 +90,24 @@
Parcel* reply,
uint32_t flags = 0) = 0;
+ // DeathRecipient is pure abstract, there is no virtual method
+ // implementation to put in a translation unit in order to silence the
+ // weak vtables warning.
+ #if defined(__clang__)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wweak-vtables"
+ #endif
+
class DeathRecipient : public virtual RefBase
{
public:
virtual void binderDied(const wp<IBinder>& who) = 0;
};
+ #if defined(__clang__)
+ #pragma clang diagnostic pop
+ #endif
+
/**
* Register the @a recipient for a notification if this binder
* goes away. If this binder object unexpectedly goes away
diff --git a/include/binder/Parcel.h b/include/binder/Parcel.h
index 14fd002..74e75d7 100644
--- a/include/binder/Parcel.h
+++ b/include/binder/Parcel.h
@@ -463,6 +463,11 @@
bool mMutable;
};
+ #if defined(__clang__)
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wweak-vtables"
+ #endif
+
class FlattenableHelperInterface {
protected:
~FlattenableHelperInterface() { }
@@ -473,12 +478,18 @@
virtual status_t unflatten(void const* buffer, size_t size, int const* fds, size_t count) = 0;
};
+ #if defined(__clang__)
+ #pragma clang diagnostic pop
+ #endif
+
template<typename T>
class FlattenableHelper : public FlattenableHelperInterface {
friend class Parcel;
const Flattenable<T>& val;
explicit FlattenableHelper(const Flattenable<T>& _val) : val(_val) { }
+ protected:
+ ~FlattenableHelper() = default;
public:
virtual size_t getFlattenedSize() const {
return val.getFlattenedSize();
diff --git a/include/binder/Parcelable.h b/include/binder/Parcelable.h
index faf0d34..d5b57ac 100644
--- a/include/binder/Parcelable.h
+++ b/include/binder/Parcelable.h
@@ -26,6 +26,11 @@
class Parcel;
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wweak-vtables"
+#endif
+
// Abstract interface of all parcelables.
class Parcelable {
public:
@@ -46,6 +51,10 @@
virtual status_t readFromParcel(const Parcel* parcel) = 0;
}; // class Parcelable
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
} // namespace android
#endif // ANDROID_PARCELABLE_H
diff --git a/include/gui/IConsumerListener.h b/include/gui/IConsumerListener.h
index e428371..aef076c 100644
--- a/include/gui/IConsumerListener.h
+++ b/include/gui/IConsumerListener.h
@@ -39,7 +39,7 @@
class ConsumerListener : public virtual RefBase {
public:
ConsumerListener() { }
- virtual ~ConsumerListener() { }
+ virtual ~ConsumerListener();
// onFrameAvailable is called from queueBuffer each time an additional
// frame becomes available for consumption. This means that frames that
diff --git a/include/gui/IProducerListener.h b/include/gui/IProducerListener.h
index 3848a6c..4a5ed46 100644
--- a/include/gui/IProducerListener.h
+++ b/include/gui/IProducerListener.h
@@ -33,7 +33,7 @@
{
public:
ProducerListener() {}
- virtual ~ProducerListener() {}
+ virtual ~ProducerListener();
// onBufferReleased is called from IGraphicBufferConsumer::releaseBuffer to
// notify the producer that a new buffer is free and ready to be dequeued.
@@ -59,6 +59,7 @@
class DummyProducerListener : public BnProducerListener
{
public:
+ virtual ~DummyProducerListener();
virtual void onBufferReleased() {}
};
diff --git a/libs/gui/IConsumerListener.cpp b/libs/gui/IConsumerListener.cpp
index 9a0b7a4..4382ee8 100644
--- a/libs/gui/IConsumerListener.cpp
+++ b/libs/gui/IConsumerListener.cpp
@@ -92,6 +92,7 @@
return BBinder::onTransact(code, data, reply, flags);
}
+ConsumerListener::~ConsumerListener() = default;
// ---------------------------------------------------------------------------
}; // namespace android
diff --git a/libs/gui/IProducerListener.cpp b/libs/gui/IProducerListener.cpp
index 9d18ea2..855a488 100644
--- a/libs/gui/IProducerListener.cpp
+++ b/libs/gui/IProducerListener.cpp
@@ -56,4 +56,8 @@
return BBinder::onTransact(code, data, reply, flags);
}
+ProducerListener::~ProducerListener() = default;
+
+DummyProducerListener::~DummyProducerListener() = default;
+
} // namespace android