summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-06-18 07:06:01 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-06-21 11:27:29 +0200
commitebc5cfda907930be0bad6e68ed5fd3060f2980d7 (patch)
tree3f4ae470f7fceef8ccd781d9191e1905928e8b29 /testsuites/sptests
parentscore: Macros to declare and define global symbols (diff)
downloadrtems-ebc5cfda907930be0bad6e68ed5fd3060f2980d7.tar.bz2
spmisc01: Add test cases for basedefs.h stuff
Diffstat (limited to 'testsuites/sptests')
-rw-r--r--testsuites/sptests/spmisc01/init.c199
-rw-r--r--testsuites/sptests/spmisc01/spmisc01.doc26
2 files changed, 225 insertions, 0 deletions
diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c
index 4ff6365eeb..4fab3f0e84 100644
--- a/testsuites/sptests/spmisc01/init.c
+++ b/testsuites/sptests/spmisc01/init.c
@@ -17,19 +17,218 @@
#endif
#include <rtems.h>
+#include <string.h>
#include <tmacros.h>
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_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)
{
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(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();
rtems_test_exit(0);
}
diff --git a/testsuites/sptests/spmisc01/spmisc01.doc b/testsuites/sptests/spmisc01/spmisc01.doc
index 2654788f02..bcd4cd9c04 100644
--- a/testsuites/sptests/spmisc01/spmisc01.doc
+++ b/testsuites/sptests/spmisc01/spmisc01.doc
@@ -4,8 +4,34 @@ test set name: spbasedefs01
directives:
+ - RTEMS_ALIAS()
+ - RTEMS_ALIGNED()
+ - RTEMS_ARRAY_SIZE()
+ - RTEMS_COMPILER_MEMORY_BARRIER()
+ - RTEMS_CONCAT()
+ - RTEMS_CONTAINER_OF()
- RTEMS_DECLARE_GLOBAL_SYMBOL()
+ - RTEMS_DECONST()
- 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: