}];
}
+def FloatT : TypeDecl<"float_t"> {
+ let Decl = [{
+ #define __need_float_t
+ #include <__llvm-libc-stdc-types.h>
+ }];
+}
+
+def DoubleT : TypeDecl<"double_t"> {
+ let Decl = [{
+ #define __need_double_t
+ #include <__llvm-libc-stdc-types.h>
+ }];
+}
+
def MathAPI : PublicAPI<"math.h"> {
let Macros = [
SimpleMacroDef<"MATH_ERRNO", "1">,
IsInfMacro,
IsNanMacro,
];
+ let TypeDeclarations = [
+ DoubleT,
+ FloatT,
+ ];
let Functions = [
"cosf",
"round",
--- /dev/null
+//===-- Definitions of common types from the C standard. ------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// This header file does not have a header guard. It is internal to LLVM libc
+// and intended to be used to pick specific definitions without polluting the
+// public headers with unnecessary definitions.
+
+#undef __LLVM_LIBC_FLOAT_T
+#undef __LLVM_LIBC_DOUBLE_T
+
+#if !defined(__FLT_EVAL_METHOD__) || __FLT_EVAL_METHOD__ == 0
+#define __LLVM_LIBC_FLOAT_T float
+#define __LLVM_LIBC_DOUBLE_T double
+#elif __FLT_EVAL_METHOD__ == 1
+#define __LLVM_LIBC_FLOAT_T double
+#define __LLVM_LIBC_DOUBLE_T double
+#elif __FLT_EVAL_METHOD__ == 2
+#define __LLVM_LIBC_FLOAT_T long double
+#define __LLVM_LIBC_DOUBLE_T long double
+#else
+#error "Unsupported __FLT_EVAL_METHOD__ value."
+#endif
+
+#if defined(__need_float_t) && !defined(__llvm_libc_float_t_defined)
+typedef __LLVM_LIBC_FLOAT_T float_t;
+#define __llvm_libc_float_t_defined
+#endif // __need_float_t
+
+#if defined(__need_double_t) && !defined(__llvm_libc_double_t_defined)
+typedef __LLVM_LIBC_DOUBLE_T double_t;
+#define __llvm_libc_double_t_defined
+#endif // __need_double_t