diff --git a/extras/fixture/src/unity_fixture_internals.h b/extras/fixture/src/unity_fixture_internals.h index 1fdbb98..daeebb3 100644 --- a/extras/fixture/src/unity_fixture_internals.h +++ b/extras/fixture/src/unity_fixture_internals.h @@ -15,6 +15,7 @@ struct _UnityFixture const char* NameFilter; const char* GroupFilter; }; +extern struct _UnityFixture UnityFixture; typedef void unityfunction(void); void UnityTestRunner(unityfunction* setup, diff --git a/extras/fixture/test/Makefile b/extras/fixture/test/Makefile index f3f7ab1..6e096ae 100644 --- a/extras/fixture/test/Makefile +++ b/extras/fixture/test/Makefile @@ -34,6 +34,11 @@ noStdlibMalloc: ../build/ @ echo "build with noStdlibMalloc" ./$(TARGET) +clang89: ../build/ + clang $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32 -std=c89 -Wno-comment + clang $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32 \ + -D UNITY_EXCLUDE_STDLIB_MALLOC -std=c89 -Wno-comment ; ./$(TARGET) + clangEverything: clang $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m64 -Weverything @@ -56,5 +61,6 @@ CFLAGS += -Wstrict-overflow=5 CFLAGS += -Wstrict-prototypes CFLAGS += -Wswitch-default CFLAGS += -Wundef +CFLAGS += -Wno-error=undef # Warning only, this should not stop the build CFLAGS += -Wunused CFLAGS += -fstrict-aliasing diff --git a/extras/fixture/test/unity_fixture_Test.c b/extras/fixture/test/unity_fixture_Test.c index 1ccba11..ee227c4 100644 --- a/extras/fixture/test/unity_fixture_Test.c +++ b/extras/fixture/test/unity_fixture_Test.c @@ -10,8 +10,6 @@ #include <stdlib.h> #include <string.h> -extern struct _UnityFixture UnityFixture; - TEST_GROUP(UnityFixture); TEST_SETUP(UnityFixture) @@ -314,6 +312,9 @@ TEST_TEAR_DOWN(LeakDetection) } // This tricky set of defines lets us see if we are using the Spy, returns 1 if true +#ifdef __STDC_VERSION__ + +#if __STDC_VERSION__ >= 199901L #define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0) #define ASSIGN_VALUE(a) VAL_##a #define VAL_UnityOutputCharSpy_OutputChar 0, 1 @@ -322,6 +323,16 @@ TEST_TEAR_DOWN(LeakDetection) #if USING_SPY_AS(UNITY_OUTPUT_CHAR) #define USING_OUTPUT_SPY // UNITY_OUTPUT_CHAR = UnityOutputCharSpy_OutputChar #endif +#endif // >= 199901 + +#else // __STDC_VERSION__ else +#define UnityOutputCharSpy_OutputChar 42 +#if UNITY_OUTPUT_CHAR == UnityOutputCharSpy_OutputChar // Works if no -Wundef -Werror + #define USING_OUTPUT_SPY +#endif +#undef UnityOutputCharSpy_OutputChar +#endif // __STDC_VERSION__ + TEST(LeakDetection, DetectsLeak) { #ifndef USING_OUTPUT_SPY @@ -347,8 +358,8 @@ TEST(LeakDetection, BufferOverrunFoundDuringFree) TEST_IGNORE(); #else void* m = malloc(10); - TEST_ASSERT_NOT_NULL(m); char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); s[10] = (char)0xFF; UnityOutputCharSpy_Enable(1); EXPECT_ABORT_BEGIN @@ -367,8 +378,8 @@ TEST(LeakDetection, BufferOverrunFoundDuringRealloc) TEST_IGNORE(); #else void* m = malloc(10); - TEST_ASSERT_NOT_NULL(m); char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); s[10] = (char)0xFF; UnityOutputCharSpy_Enable(1); EXPECT_ABORT_BEGIN @@ -387,8 +398,8 @@ TEST(LeakDetection, BufferGuardWriteFoundDuringFree) TEST_IGNORE(); #else void* m = malloc(10); - TEST_ASSERT_NOT_NULL(m); char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); s[-1] = (char)0x00; // Will not detect 0 s[-2] = (char)0x01; UnityOutputCharSpy_Enable(1); @@ -408,8 +419,8 @@ TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc) TEST_IGNORE(); #else void* m = malloc(10); - TEST_ASSERT_NOT_NULL(m); char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); s[-1] = (char)0x0A; UnityOutputCharSpy_Enable(1); EXPECT_ABORT_BEGIN @@ -450,8 +461,8 @@ TEST(InternalMalloc, MallocPastBufferFails) { #ifdef UNITY_EXCLUDE_STDLIB_MALLOC void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); - TEST_ASSERT_NOT_NULL(m); void* n = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2); + TEST_ASSERT_NOT_NULL(m); TEST_ASSERT_NULL(n); free(m); #endif @@ -461,8 +472,8 @@ TEST(InternalMalloc, CallocPastBufferFails) { #ifdef UNITY_EXCLUDE_STDLIB_MALLOC void* m = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); - TEST_ASSERT_NOT_NULL(m); void* n = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2); + TEST_ASSERT_NOT_NULL(m); TEST_ASSERT_NULL(n); free(m); #endif @@ -472,8 +483,8 @@ TEST(InternalMalloc, MallocThenReallocGrowsMemoryInPlace) { #ifdef UNITY_EXCLUDE_STDLIB_MALLOC void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); - TEST_ASSERT_NOT_NULL(m); void* n = realloc(m, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 9); + TEST_ASSERT_NOT_NULL(m); TEST_ASSERT_EQUAL(m, n); free(n); #endif @@ -483,11 +494,11 @@ TEST(InternalMalloc, ReallocFailDoesNotFreeMem) { #ifdef UNITY_EXCLUDE_STDLIB_MALLOC void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2); - TEST_ASSERT_NOT_NULL(m); void* n1 = malloc(10); void* out_of_mem = realloc(n1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); - TEST_ASSERT_NULL(out_of_mem); void* n2 = malloc(10); + TEST_ASSERT_NOT_NULL(m); + TEST_ASSERT_NULL(out_of_mem); TEST_ASSERT_NOT_EQUAL(n2, n1); free(n2); free(n1); diff --git a/src/unity_internals.h b/src/unity_internals.h index 90cac97..b6f1061 100644 --- a/src/unity_internals.h +++ b/src/unity_internals.h @@ -396,7 +396,7 @@ typedef enum _UNITY_FLOAT_TRAIT_T UNITY_FLOAT_IS_NOT_NAN, UNITY_FLOAT_IS_NAN, UNITY_FLOAT_IS_NOT_DET, - UNITY_FLOAT_IS_DET, + UNITY_FLOAT_IS_DET } UNITY_FLOAT_TRAIT_T; #endif