summaryrefslogtreecommitdiffstats
path: root/libm
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-07-10 16:58:07 -0700
committerElliott Hughes <enh@google.com>2014-07-10 16:58:07 -0700
commitaadc4b2ff03b12142f2c6163266ebdb1df2a6e76 (patch)
treebb370c0c4f65da0f2c615bdd4f33dbfc129971c5 /libm
parent9b491470ac65a11775e52631ef5e655af9eb2a85 (diff)
downloadbionic-aadc4b2ff03b12142f2c6163266ebdb1df2a6e76.zip
bionic-aadc4b2ff03b12142f2c6163266ebdb1df2a6e76.tar.gz
bionic-aadc4b2ff03b12142f2c6163266ebdb1df2a6e76.tar.bz2
Switch libm to building with clang.
Bug: 16211965 Change-Id: I81ec9706a4f2b5e8a840508a0f711cd25a5826ca
Diffstat (limited to 'libm')
-rw-r--r--libm/Android.mk19
-rw-r--r--libm/sincos.c5
2 files changed, 18 insertions, 6 deletions
diff --git a/libm/Android.mk b/libm/Android.mk
index 994caa0..d099dc2 100644
--- a/libm/Android.mk
+++ b/libm/Android.mk
@@ -1,5 +1,5 @@
ifneq ($(TARGET_USE_PRIVATE_LIBM),true)
-LOCAL_PATH:= $(call my-dir)
+LOCAL_PATH := $(call my-dir)
# TODO: this comes from from upstream's libc, not libm, but it's an
# implementation detail that should have hidden visibility, so it needs
@@ -232,14 +232,21 @@ libm_ld_src_files += \
# TODO: re-enable i387/e_sqrtf.S for x86, and maybe others.
libm_common_cflags := \
+ -Wall \
+ -Wextra \
+ -Wunused \
+ -Werror=pointer-to-int-cast \
+ -Werror=int-to-pointer-cast \
+ -Werror=type-limits \
+ -Werror \
-DFLT_EVAL_METHOD=0 \
- -std=c99 \
+ -std=gnu99 \
-include $(LOCAL_PATH)/freebsd-compat.h \
-Wno-missing-braces \
-Wno-parentheses \
-Wno-sign-compare \
-Wno-uninitialized \
- -Wno-unknown-pragmas \
+ -Wno-unused-variable \
-fvisibility=hidden \
# Workaround the GCC "(long)fn -> lfn" optimization bug which will result in
@@ -255,7 +262,8 @@ libm_ld_includes := $(LOCAL_PATH)/upstream-freebsd/lib/msun/ld128/
# libm.a for target.
#
include $(CLEAR_VARS)
-LOCAL_MODULE:= libm
+LOCAL_MODULE := libm
+LOCAL_CLANG := true
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := $(libm_common_cflags)
@@ -287,7 +295,8 @@ include $(BUILD_STATIC_LIBRARY)
# libm.so for target.
#
include $(CLEAR_VARS)
-LOCAL_MODULE:= libm
+LOCAL_MODULE := libm
+LOCAL_CLANG := true
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
LOCAL_SYSTEM_SHARED_LIBRARIES := libc
LOCAL_WHOLE_STATIC_LIBRARIES := libm
diff --git a/libm/sincos.c b/libm/sincos.c
index ad75549..6bd483a 100644
--- a/libm/sincos.c
+++ b/libm/sincos.c
@@ -22,18 +22,21 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
*/
+
#define _GNU_SOURCE 1
#include <math.h>
+#if !defined(__clang__)
// Disable sincos optimization for all functions in this file,
// otherwise gcc would generate infinite calls.
// Refer to gcc PR46926.
// -fno-builtin-sin or -fno-builtin-cos can disable sincos optimization,
// but these two options do not work inside optimize pragma in-file.
// Thus we just enforce -O0 when compiling this file.
+// clang doesn't implement this optimization anyway, so it doesn't need this.
#pragma GCC optimize ("O0")
+#endif
void sincos(double x, double* p_sin, double* p_cos) {
*p_sin = sin(x);