Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/Parser/ExpressionNode.cc	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -163,5 +163,5 @@
 ConstantExpr *build_constantStr( const std::string & str ) {
 	// string should probably be a primitive type
-	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
+	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ),
 				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
 											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/SynTree/Type.h	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -155,4 +155,5 @@
 	virtual Type * getComponent( unsigned i ) { assertf( size() == 1 && i == 0, "Type::getComponent was called with size %d and index %d\n", size(), i ); return this; }
 
+	/// return type without outer pointers and arrays
 	Type *stripDeclarator();
 
Index: src/tests/avltree/avl.h
===================================================================
--- src/tests/avltree/avl.h	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/tests/avltree/avl.h	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -61,5 +61,5 @@
 void ?{}(tree(K, V) *t, K key, V value);
 
-forall(otype K | Comparable(K), otype V)
+forall(otype K, otype V)
 void ^?{}(tree(K, V) * t);
 
Index: src/tests/avltree/avl1.c
===================================================================
--- src/tests/avltree/avl1.c	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/tests/avltree/avl1.c	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -12,5 +12,5 @@
 }
 
-forall(otype K | Comparable(K), otype V)
+forall(otype K, otype V)
 void ^?{}(tree(K, V) * t){
   delete(t->left);
Index: src/tests/avltree/avl_test.c
===================================================================
--- src/tests/avltree/avl_test.c	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/tests/avltree/avl_test.c	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -25,5 +25,5 @@
 
   // int -> char *
-  tree(int, char *) * smap = create(-1, "baz");
+  tree(int, const char *) * smap = create(-1, "baz");
   insert(&smap, 12, "bar");
   insert(&smap, 2, "foo");
@@ -35,17 +35,17 @@
   delete(smap);
 
-  // char* -> char*
-  struct c_str { char *str; };  // wraps a C string
-  int ?<?(c_str a, c_str b) {
-    return strcmp(a.str,b.str) < 0;
+  // const char* -> const char*
+  int ?<?(const char * a, const char * b) {
+    return strcmp(a, b) < 0;
   }
-  tree(c_str, char *) * ssmap = create((c_str){"queso"}, "cheese");
-  insert(&ssmap, (c_str){"foo"}, "bar");
-  insert(&ssmap, (c_str){"hello"}, "world");
+
+  tree(const char *, const char *) * ssmap = create("queso", "cheese");
+  insert(&ssmap, "foo", "bar");
+  insert(&ssmap, "hello", "world");
   assert( height(ssmap) == 2 );
 
-  printf("%s %s %s\n", *find(ssmap, (c_str){"hello"}), *find(ssmap, (c_str){"foo"}), *find(ssmap, (c_str){"queso"}));
+  printf("%s %s %s\n", *find(ssmap, "hello"), *find(ssmap, "foo"), *find(ssmap, "queso"));
 
-  remove(&ssmap, (c_str){"foo"});
+  remove(&ssmap, "foo");
   delete(ssmap);
 }
Index: src/tests/completeTypeError.c
===================================================================
--- src/tests/completeTypeError.c	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/tests/completeTypeError.c	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -62,5 +62,5 @@
 
 forall(dtype T | sized(T))
-void qux(T * z) {
+void quux(T * z) {
 	// okay
 	bar(z);
Index: src/tests/dtor-early-exit.c
===================================================================
--- src/tests/dtor-early-exit.c	(revision 2c4bc8114e8d7626b9a63138e95d0072d839e1e1)
+++ src/tests/dtor-early-exit.c	(revision 142cf5d5bc4083f9bfbdb71d2ae41cf1ec930d79)
@@ -28,6 +28,6 @@
 // don't want these called
 void ?{}(A * a) { assert( false ); }
-void ?{}(A * a, char * name) { a->name = name; sout | "construct " | name | endl; a->x = (int*)malloc(); }
-void ?{}(A * a, char * name, int * ptr) { assert( false ); }
+void ?{}(A * a, const char * name) { a->name = name; sout | "construct " | name | endl; a->x = (int*)malloc(); }
+void ?{}(A * a, const char * name, int * ptr) { assert( false ); }
 
 A ?=?(A * a, A a) {  sout | "assign " | a->name | " " | a.name; return a; }
