Fix userprog tests for clang
authorPablo de Oliveira <pablo@sifflez.org>
Mon, 17 Mar 2014 18:13:22 +0000 (19:13 +0100)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 18 Mar 2014 15:33:24 +0000 (08:33 -0700)
Recent clang version, detect attemps to dereference or call NULL, and
eliminate the code.

../../tests/userprog/bad-read.c:11:9: warning: indirection of
non-volatile null pointer will be deleted, not trap [-Wnull-dereference]
        *(int *) NULL);
        ^~~~~~~~~~~~~

This patchs adds the volatile modifier as necessary.
It allows to use clang to compile the tests.

src/tests/userprog/bad-jump.c
src/tests/userprog/bad-read.c
src/tests/userprog/bad-write.c
src/tests/userprog/no-vm/multi-oom.c

index 51b7c9f57ea6a15cfe60a254a7fb3cd04fae87ea..a915c396b874e5338daecf0cd3f4d6aa1150deee 100644 (file)
@@ -4,10 +4,13 @@
 #include "tests/lib.h"
 #include "tests/main.h"
 
+typedef int (* volatile functionptr)(void);
+
 void
 test_main (void) 
 {
+  functionptr fp = NULL;
   msg ("Congratulations - you have successfully called NULL: %d", 
-        ((int (*)(void))NULL)());
+        fp());
   fail ("should have exited with -1");
 }
index 904c278a0e307d1ebc22fdbdb77da74e64849818..d821a9a1fd15a228b2a7287f6a1a74f209372671 100644 (file)
@@ -8,6 +8,6 @@ void
 test_main (void) 
 {
   msg ("Congratulations - you have successfully dereferenced NULL: %d", 
-        *(int *)NULL);
+        *(volatile int *) NULL);
   fail ("should have exited with -1");
 }
index 000c26b315a88179cca360dc75b55eeffd91d01d..9082c9bd157c0f7a3cb84f1407b2b20533c58aab 100644 (file)
@@ -7,6 +7,6 @@
 void
 test_main (void) 
 {
-  *(int *)NULL = 42;
+  *(volatile int *)NULL = 42;
   fail ("should have exited with -1");
 }
index 6a4472daed7575a319e0ee57cdf26836af34f5bd..cd2c939e808aaac822de41c7779530f64045d027 100644 (file)
@@ -67,15 +67,15 @@ consume_some_resources_and_die (int seed)
 {
   consume_some_resources ();
   random_init (seed);
-  int *PHYS_BASE = (int *)0xC0000000;
+  volatile int *PHYS_BASE = (volatile int *)0xC0000000;
 
   switch (random_ulong () % 5)
     {
       case 0:
-        *(int *) NULL = 42;
+        *(volatile int *) NULL = 42;
 
       case 1:
-        return *(int *) NULL;
+        return *(volatile int *) NULL;
 
       case 2:
         return *PHYS_BASE;