]> granicus.if.org Git - clang/commitdiff
1/2 off all structs should not have any virtual functions.
authorMike Stump <mrs@apple.com>
Thu, 7 Jan 2010 20:55:28 +0000 (20:55 +0000)
committerMike Stump <mrs@apple.com>
Thu, 7 Jan 2010 20:55:28 +0000 (20:55 +0000)
Replace magic numbers with uuids.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92941 91177308-0d34-0410-b5e6-96231b3b80d8

utils/VtableTest/gen.cc

index ee426e49b2f7457b311e79fbdb6b7b75159f0b22..9036b2bba9855f024807bfb04250628a3acf2cfb 100644 (file)
@@ -26,7 +26,7 @@ void g(int i) {
   printf("%d", i);
 }
 
-int vfn = 0;
+int uuid = 0;
 char base_present[N_STRUCTS][N_STRUCTS];
 
 bool is_ambiguous(int s, int base) {
@@ -119,12 +119,15 @@ void gs(int s) {
 
   /* Virtual functions */
   static int funcs[N_FUNCS];
-  int n_funcs = random() % N_FUNCS;
+  // PARAM: 1/2 of all structs should have no virtual functions
+  int n_funcs = random() % (N_FUNCS*2);
+  if (n_funcs > N_FUNCS)
+    n_funcs = 0;
   int old_func = -1;
   for (int i = 0; i < n_funcs; ++i) {
     int fn = old_func + random() % FUNCSPACING + 1;
     funcs[i] = fn;
-    g("  virtual void fun"); g(fn); g("(char *t) { mix(\"vfn this offset\", (char *)this - t); mix(\"vfn uuid\", "); g(++vfn); gl("); }");
+    g("  virtual void fun"); g(fn); g("(char *t) { mix(\"vfn this offset\", (char *)this - t); mix(\"vfn uuid\", "); g(++uuid); gl("); }");
     old_func = fn;
   }
 
@@ -154,7 +157,7 @@ void gs(int s) {
     for (int i = 0; i < n_bases; ++i) {
       g("    if ((char *)dynamic_cast<s"); g(bases[i]); gl("*>(this))");
       g("      mix(\"base dyn cast\", t - (char *)dynamic_cast<s"); g(bases[i]); gl("*>(this));");
-      gl("    else mix(\"no dyncast\", 666);");
+      g("    else mix(\"no dyncast\", "); g(++uuid); gl(");");
     }
   }
 
@@ -162,15 +165,17 @@ void gs(int s) {
   for (int i = 0; i < n_fields; ++i) {
     g("    mix(\"field offset\", (char *)&field"); g(i); gl(" - (char *)this);");
   }
-  if (n_fields == 0)
-    gl("    mix(\"no fields\", 42);");
+  if (n_fields == 0) {
+    g("    mix(\"no fields\", "); g(++uuid); gl(");");
+  }
 
   /* check functions */
   for (int i = 0; i < n_funcs; ++i) {
     g("    fun"); g(funcs[i]); gl("(t);");
   }
-  if (n_funcs == 0)
-    gl("    mix(\"no funcs\", 13);");
+  if (n_funcs == 0) {
+    g("    mix(\"no funcs\", "); g(++uuid); gl(");");
+  }
 
   gl("  }");