⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 builtin-attr-1.c

📁 用于进行gcc测试
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 2003, 2005  Free Software Foundation.   Verify that the `const' function attribute is applied to various   builtins and that these functions are optimized away by the   compiler under the appropriate circumstances.   Written by Kaveh Ghazi, 2003-08-04.  *//* { dg-do link } *//* { dg-options "-ffast-math" } *//* These are helper macros to test combinations of functions.  We test   foo() != foo() with the same arguments, and expect the compiler to   optimize away these tests of const functions.  *//* Just test the __builtin_ functions.  */#define BUILTIN_TEST1(FN, TYPE) \extern void link_failure_builtin_##FN(void); \void test_builtin_##FN(TYPE x) \{ if (__builtin_##FN(x) != __builtin_##FN(x)) link_failure_builtin_##FN(); }/* Just test the __builtin_ functions.  */#define BUILTIN_TEST2(FN, TYPE) \extern void link_failure_builtin_##FN(void); \void test_builtin_##FN(TYPE x, TYPE y) \{ if (__builtin_##FN(x,y) != __builtin_##FN(x,y)) link_failure_builtin_##FN(); }/* Also test the regular (non-__builtin_) function.  */#define TEST1(FN, TYPE, RTYPE) \BUILTIN_TEST1(FN, TYPE) \extern void link_failure_##FN(void); \extern RTYPE FN(TYPE); \void test_##FN(TYPE x) { if (FN(x) != FN(x)) link_failure_##FN(); }/* Test the __builtin_ functions taking void arguments (with the "f"   and "l" variants).  */#define BUILTIN_FPTEST0(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(void) \{ if (__builtin_##FN() != __builtin_##FN()) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(void) \{ if (__builtin_##FN##f() != __builtin_##FN##f()) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(void) \{ if (__builtin_##FN##l() != __builtin_##FN##l()) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking one FP argument (with the "f"   and "l" variants).  */#define BUILTIN_FPTEST1(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(double d) \{ if (__builtin_##FN(d) != __builtin_##FN(d)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(float f) \{ if (__builtin_##FN##f(f) != __builtin_##FN##f(f)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(long double ld) \{ if (__builtin_##FN##l(ld) != __builtin_##FN##l(ld)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking one argument of supplied type   (with the "f" and "l" variants).  */#define BUILTIN_FPTEST1ARG(FN, TYPE) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(TYPE x) \{ if (__builtin_##FN(x) != __builtin_##FN(x)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(TYPE x) \{ if (__builtin_##FN##f(x) != __builtin_##FN##f(x)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(TYPE x) \{ if (__builtin_##FN##l(x) != __builtin_##FN##l(x)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking two FP arguments (with the "f"   and "l" variants).  */#define BUILTIN_FPTEST2(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(double d1, double d2) \{ if (__builtin_##FN(d1,d2) != __builtin_##FN(d1,d2)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(float f1, float f2) \{ if (__builtin_##FN##f(f1,f2) != __builtin_##FN##f(f1,f2)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(long double ld1, long double ld2) \{ if (__builtin_##FN##l(ld1,ld2) != __builtin_##FN##l(ld1,ld2)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking two arguments, the first one   is of a supplied type and the second one one is of FP type (with   the "f" and "l" variants).  */#define BUILTIN_FPTEST2ARG1(FN, TYPE) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(TYPE x, double d) \{ if (__builtin_##FN(x,d) != __builtin_##FN(x,d)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(TYPE x, float f) \{ if (__builtin_##FN##f(x,f) != __builtin_##FN##f(x,f)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(TYPE x, long double ld) \{ if (__builtin_##FN##l(x,ld) != __builtin_##FN##l(x,ld)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking two arguments, the first one   is of FP type and the second one one is of a supplied type (with   the "f" and "l" variants).  */#define BUILTIN_FPTEST2ARG2(FN, TYPE) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(double d, TYPE x) \{ if (__builtin_##FN(d,x) != __builtin_##FN(d,x)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(float f, TYPE x) \{ if (__builtin_##FN##f(f,x) != __builtin_##FN##f(f,x)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(long double ld, TYPE x) \{ if (__builtin_##FN##l(ld,x) != __builtin_##FN##l(ld,x)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking three FP arguments (with the   "f" and "l" variants).  */#define BUILTIN_FPTEST3(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(double d1, double d2, double d3) \{ if (__builtin_##FN(d1,d2,d3) != __builtin_##FN(d1,d2,d3)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(float f1, float f2, float f3) \{ if (__builtin_##FN##f(f1,f2,f3) != __builtin_##FN##f(f1,f2,f3)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(long double ld1, long double ld2, long double ld3) \{ if (__builtin_##FN##l(ld1,ld2,ld3) != __builtin_##FN##l(ld1,ld2,ld3)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking one complex argument (with the   "f" and "l" variants).  */#define BUILTIN_CPTEST1(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(_Complex double d) \{ if (__builtin_##FN(d) != __builtin_##FN(d)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(_Complex float f) \{ if (__builtin_##FN##f(f) != __builtin_##FN##f(f)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(_Complex long double ld) \{ if (__builtin_##FN##l(ld) != __builtin_##FN##l(ld)) link_failure_builtin_##FN##l(); }/* Test the __builtin_ functions taking two complex arguments (with   the "f" and "l" variants).  */#define BUILTIN_CPTEST2(FN) \extern void link_failure_builtin_##FN(void); \extern void link_failure_builtin_##FN##f(void); \extern void link_failure_builtin_##FN##l(void); \void test_builtin_##FN(_Complex double d1, _Complex double d2) \{ if (__builtin_##FN(d1,d2) != __builtin_##FN(d1,d2)) link_failure_builtin_##FN(); } \void test_builtin_##FN##f(_Complex float f1, _Complex float f2) \{ if (__builtin_##FN##f(f1,f2) != __builtin_##FN##f(f1,f2)) link_failure_builtin_##FN##f(); } \void test_builtin_##FN##l(_Complex long double ld1, _Complex long double ld2) \{ if (__builtin_##FN##l(ld1,ld2) != __builtin_##FN##l(ld1,ld2)) link_failure_builtin_##FN##l(); }/* These macros additionally test the non-__builtin_ functions.  *//* Test the functions taking one FP argument (with the "f" and "l"   variants) and returning that type.  */#define FPTEST1(FN) \BUILTIN_FPTEST1(FN) \extern void link_failure_##FN(void); \extern void link_failure_##FN##f(void); \extern void link_failure_##FN##l(void); \extern double FN(double); \extern float FN##f(float); \extern long double FN##l(long double); \void test_##FN(double d) \{ if (FN(d) != FN(d)) link_failure_##FN(); } \void test_##FN##f(float f) \{ if (FN##f(f) != FN##f(f)) link_failure_##FN##f(); } \void test_##FN##l(long double ld) \{ if (FN##l(ld) != FN##l(ld)) link_failure_##FN##l(); }/* Test the functions taking one FP argument (with the "f" and "l"   variants) and returning TYPE.  */#define FPTEST1T(FN, TYPE) \BUILTIN_FPTEST1(FN) \extern void link_failure_##FN(void); \extern void link_failure_##FN##f(void); \extern void link_failure_##FN##l(void); \extern TYPE FN(double); \extern TYPE FN##f(float); \extern TYPE FN##l(long double); \void test_##FN(double d) \{ if (FN(d) != FN(d)) link_failure_##FN(); } \void test_##FN##f(float f) \{ if (FN##f(f) != FN##f(f)) link_failure_##FN##f(); } \void test_##FN##l(long double ld) \{ if (FN##l(ld) != FN##l(ld)) link_failure_##FN##l(); }/* Test the functions taking two FP arguments (with the "f" and "l"   variants).  */#define FPTEST2(FN) \BUILTIN_FPTEST2(FN) \extern void link_failure_##FN(void); \extern void link_failure_##FN##f(void); \extern void link_failure_##FN##l(void); \extern double FN(double, double); \extern float FN##f(float, float); \extern long double FN##l(long double, long double); \void test_##FN(double d1, double d2) \{ if (FN(d1,d2) != FN(d1,d2)) link_failure_##FN(); } \void test_##FN##f(float f1, float f2) \{ if (FN##f(f1,f2) != FN##f(f1,f2)) link_failure_##FN##f(); } \void test_##FN##l(long double ld1, long double ld2) \{ if (FN##l(ld1,ld2) != FN##l(ld1,ld2)) link_failure_##FN##l(); }/* Test the functions taking two arguments, the first one is of a   supplied type and the second one one is of FP type (with the "f"   and "l" variants).  */#define FPTEST2ARG1(FN, TYPE) \BUILTIN_FPTEST2ARG1(FN, TYPE) \extern void link_failure_##FN(void); \extern void link_failure_##FN##f(void); \extern void link_failure_##FN##l(void); \extern double FN(TYPE, double); \extern float FN##f(TYPE, float); \extern long double FN##l(TYPE, long double); \void test_##FN(TYPE x, double d) \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -