forked from Imagelibrary/rtems
spmisc01: Add test cases for basedefs.h stuff
This commit is contained in:
@@ -17,19 +17,218 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <tmacros.h>
|
#include <tmacros.h>
|
||||||
|
|
||||||
const char rtems_test_name[] = "SPMISC 1";
|
const char rtems_test_name[] = "SPMISC 1";
|
||||||
|
|
||||||
|
RTEMS_INLINE_ROUTINE int inline_func(void)
|
||||||
|
{
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
RTEMS_NO_INLINE static int noinline_func(void)
|
||||||
|
{
|
||||||
|
return 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
RTEMS_NO_RETURN void noreturn_func(void);
|
||||||
|
|
||||||
|
RTEMS_PURE static int pure_func(void)
|
||||||
|
{
|
||||||
|
return 21;
|
||||||
|
}
|
||||||
|
|
||||||
|
RTEMS_SECTION(".rtemsroset.test") static int section_variable = 28;
|
||||||
|
|
||||||
|
RTEMS_USED static int used_func(void)
|
||||||
|
{
|
||||||
|
return 35;
|
||||||
|
}
|
||||||
|
|
||||||
|
RTEMS_USED static int used_variable;
|
||||||
|
|
||||||
|
static int unused_arg_and_variable_func(RTEMS_UNUSED int arg)
|
||||||
|
{
|
||||||
|
RTEMS_UNUSED int variable;
|
||||||
|
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t c;
|
||||||
|
uint32_t i;
|
||||||
|
} RTEMS_PACKED packed_struct;
|
||||||
|
|
||||||
|
static int alias_func(void) RTEMS_ALIAS(noinline_func);
|
||||||
|
|
||||||
|
int weak_alias_func(void) RTEMS_WEAK_ALIAS(noinline_func);
|
||||||
|
|
||||||
|
static char aligned_variable RTEMS_ALIGNED(64);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t c;
|
||||||
|
uint8_t aligned_member RTEMS_ALIGNED(64);
|
||||||
|
} aligned_member_struct;
|
||||||
|
|
||||||
|
static void unreachable(void)
|
||||||
|
{
|
||||||
|
if (0) {
|
||||||
|
RTEMS_UNREACHABLE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RTEMS_PRINTFLIKE(1, 2) static int printflike_func(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
return 56;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int obfuscate_variable(int i)
|
||||||
|
{
|
||||||
|
RTEMS_OBFUSCATE_VARIABLE(i);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
RTEMS_DECLARE_GLOBAL_SYMBOL(a_global_symbol);
|
RTEMS_DECLARE_GLOBAL_SYMBOL(a_global_symbol);
|
||||||
|
|
||||||
RTEMS_DEFINE_GLOBAL_SYMBOL(a_global_symbol, 0xabc);
|
RTEMS_DEFINE_GLOBAL_SYMBOL(a_global_symbol, 0xabc);
|
||||||
|
|
||||||
|
RTEMS_STATIC_ASSERT(0 != 1, zero_neq_one);
|
||||||
|
|
||||||
|
static int array[3];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t i;
|
||||||
|
uint32_t j[RTEMS_ZERO_LENGTH_ARRAY];
|
||||||
|
} zero_length_array_struct;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
} container_of_struct;
|
||||||
|
|
||||||
|
static void container_of(void)
|
||||||
|
{
|
||||||
|
container_of_struct s;
|
||||||
|
int *b;
|
||||||
|
|
||||||
|
b = &s.b;
|
||||||
|
rtems_test_assert(RTEMS_CONTAINER_OF(b, container_of_struct, b) == &s);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int deconst(void)
|
||||||
|
{
|
||||||
|
const int i = 70;
|
||||||
|
int *p;
|
||||||
|
|
||||||
|
p = RTEMS_DECONST(int *, &i);
|
||||||
|
return *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int devolatile(void)
|
||||||
|
{
|
||||||
|
volatile int i = 77;
|
||||||
|
int *p;
|
||||||
|
|
||||||
|
p = RTEMS_DEVOLATILE(int *, &i);
|
||||||
|
return *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int dequalify(void)
|
||||||
|
{
|
||||||
|
volatile const int i = 84;
|
||||||
|
int *p;
|
||||||
|
|
||||||
|
p = RTEMS_DEQUALIFY(int *, &i);
|
||||||
|
return *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char a;
|
||||||
|
int b;
|
||||||
|
} same_member_type_struct;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char c;
|
||||||
|
int d;
|
||||||
|
} same_member_type_struct_2;
|
||||||
|
|
||||||
|
RTEMS_STATIC_ASSERT(
|
||||||
|
RTEMS_HAVE_MEMBER_SAME_TYPE(
|
||||||
|
same_member_type_struct,
|
||||||
|
b,
|
||||||
|
same_member_type_struct_2,
|
||||||
|
d
|
||||||
|
),
|
||||||
|
same_member_type_struct_eq
|
||||||
|
);
|
||||||
|
|
||||||
|
RTEMS_STATIC_ASSERT(
|
||||||
|
!RTEMS_HAVE_MEMBER_SAME_TYPE(
|
||||||
|
same_member_type_struct,
|
||||||
|
b,
|
||||||
|
same_member_type_struct_2,
|
||||||
|
c
|
||||||
|
),
|
||||||
|
same_member_type_struct_neq
|
||||||
|
);
|
||||||
|
|
||||||
|
static int concat(void)
|
||||||
|
{
|
||||||
|
return 91;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CON con
|
||||||
|
|
||||||
|
#define CAT cat
|
||||||
|
|
||||||
|
#define STR ing
|
||||||
|
|
||||||
static void Init(rtems_task_argument arg)
|
static void Init(rtems_task_argument arg)
|
||||||
{
|
{
|
||||||
TEST_BEGIN();
|
TEST_BEGIN();
|
||||||
|
rtems_test_assert(inline_func() == 7);
|
||||||
|
RTEMS_COMPILER_MEMORY_BARRIER();
|
||||||
|
rtems_test_assert(noinline_func() == 14);
|
||||||
|
rtems_test_assert(pure_func() == 21);
|
||||||
|
rtems_test_assert(section_variable == 28);
|
||||||
|
rtems_test_assert(unused_arg_and_variable_func(49) == 42);
|
||||||
|
rtems_test_assert(sizeof(packed_struct) == 5);
|
||||||
|
rtems_test_assert(alias_func() == 14);
|
||||||
|
rtems_test_assert(weak_alias_func() == 14);
|
||||||
|
rtems_test_assert(((uintptr_t) &aligned_variable) % 64 == 0);
|
||||||
|
rtems_test_assert(offsetof(aligned_member_struct, aligned_member) % 64 == 0);
|
||||||
|
unreachable();
|
||||||
|
rtems_test_assert(printflike_func("%i", 0) == 56);
|
||||||
|
rtems_test_assert(obfuscate_variable(63) == 63);
|
||||||
rtems_test_assert((uintptr_t)a_global_symbol == 0xabc);
|
rtems_test_assert((uintptr_t)a_global_symbol == 0xabc);
|
||||||
|
rtems_test_assert(RTEMS_ARRAY_SIZE(array) == 3);
|
||||||
|
rtems_test_assert(sizeof(zero_length_array_struct) == 4);
|
||||||
|
container_of();
|
||||||
|
rtems_test_assert(deconst() == 70);
|
||||||
|
rtems_test_assert(devolatile() == 77);
|
||||||
|
rtems_test_assert(dequalify() == 84);
|
||||||
|
rtems_test_assert(
|
||||||
|
RTEMS_HAVE_MEMBER_SAME_TYPE(
|
||||||
|
same_member_type_struct,
|
||||||
|
b,
|
||||||
|
same_member_type_struct_2,
|
||||||
|
d
|
||||||
|
)
|
||||||
|
);
|
||||||
|
rtems_test_assert(
|
||||||
|
!RTEMS_HAVE_MEMBER_SAME_TYPE(
|
||||||
|
same_member_type_struct,
|
||||||
|
b,
|
||||||
|
same_member_type_struct_2,
|
||||||
|
c
|
||||||
|
)
|
||||||
|
);
|
||||||
|
rtems_test_assert(RTEMS_CONCAT(con, cat)() == 91);
|
||||||
|
rtems_test_assert(RTEMS_XCONCAT(CON, CAT)() == 91);
|
||||||
|
rtems_test_assert(strcmp(RTEMS_STRING(str), "str") == 0);
|
||||||
|
rtems_test_assert(strcmp(RTEMS_XSTRING(STR), "ing") == 0);
|
||||||
TEST_END();
|
TEST_END();
|
||||||
rtems_test_exit(0);
|
rtems_test_exit(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,34 @@ test set name: spbasedefs01
|
|||||||
|
|
||||||
directives:
|
directives:
|
||||||
|
|
||||||
|
- RTEMS_ALIAS()
|
||||||
|
- RTEMS_ALIGNED()
|
||||||
|
- RTEMS_ARRAY_SIZE()
|
||||||
|
- RTEMS_COMPILER_MEMORY_BARRIER()
|
||||||
|
- RTEMS_CONCAT()
|
||||||
|
- RTEMS_CONTAINER_OF()
|
||||||
- RTEMS_DECLARE_GLOBAL_SYMBOL()
|
- RTEMS_DECLARE_GLOBAL_SYMBOL()
|
||||||
|
- RTEMS_DECONST()
|
||||||
- RTEMS_DEFINE_GLOBAL_SYMBOL()
|
- RTEMS_DEFINE_GLOBAL_SYMBOL()
|
||||||
|
- RTEMS_DEPRECATED
|
||||||
|
- RTEMS_DEQUALIFY()
|
||||||
|
- RTEMS_DEVOLATILE()
|
||||||
|
- RTEMS_HAVE_MEMBER_SAME_TYPE()
|
||||||
|
- RTEMS_NO_INLINE
|
||||||
|
- RTEMS_NO_RETURN
|
||||||
|
- RTEMS_OBFUSCATE_VARIABLE()
|
||||||
|
- RTEMS_PACKED
|
||||||
|
- RTEMS_PRINTFLIKE()
|
||||||
|
- RTEMS_PURE
|
||||||
|
- RTEMS_SECTION()
|
||||||
|
- RTEMS_STATIC_ASSERT()
|
||||||
|
- RTEMS_STRING()
|
||||||
|
- RTEMS_UNREACHABLE()
|
||||||
|
- RTEMS_UNUSED
|
||||||
|
- RTEMS_USED
|
||||||
|
- RTEMS_WEAK_ALIAS()
|
||||||
|
- RTEMS_XCONCAT()
|
||||||
|
- RTEMS_XSTRING()
|
||||||
|
|
||||||
concepts:
|
concepts:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user