Index: doc/theses/aaron_moss_PhD/phd/background.tex
===================================================================
--- doc/theses/aaron_moss_PhD/phd/background.tex	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ doc/theses/aaron_moss_PhD/phd/background.tex	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -213,5 +213,5 @@
 The ability of types to begin or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters can lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships. 
 
-\subsection{Implicit Conversions}
+\subsection{Implicit Conversions} \label{implicit-conv-sec}
 
 In addition to the multiple interpretations of an expression produced by name overloading and polymorphic functions, for backward compatibility \CFA{} must support all of the implicit conversions present in C, producing further candidate interpretations for expressions. 
Index: doc/theses/aaron_moss_PhD/phd/resolution-heuristics.tex
===================================================================
--- doc/theses/aaron_moss_PhD/phd/resolution-heuristics.tex	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ doc/theses/aaron_moss_PhD/phd/resolution-heuristics.tex	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -2,5 +2,14 @@
 \label{resolution-chap}
 
-Talk about the resolution heuristics. This is the bulk of the thesis.
+The main task of the \CFACC{} type-checker is \emph{expression resolution}, determining which declarations the identifiers in each expression correspond to. 
+Resolution is a straightforward task in C, as each declaration has a unique identifier, but in \CFA{} the name overloading features discussed in Section~\ref{overloading-sec} generate multiple candidate declarations for each identifier.
+I refer to a given matching between identifiers and declarations in an expression as an \emph{interpretation}; an interpretation also includes information about polymorphic type bindings and implicit casts to support the \CFA{} features discussed in Sections~\ref{poly-func-sec} and~\ref{implicit-conv-sec}, each of which increase the proportion of feasible candidate interpretations. 
+To choose between feasible interpretations, \CFA{} defines a \emph{conversion cost} to rank interpretations; the expression resolution problem is thus to find the unique minimal-cost interpretation for an expression, reporting an error if no such interpretation exists.
+
+\section{Conversion Cost}
+
+
 
 % Discuss changes to cost model, as promised in Ch. 2
+
+% Mention relevance of work to C++20 concepts
Index: doc/working/exception/impl/Makefile
===================================================================
--- doc/working/exception/impl/Makefile	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
+++ doc/working/exception/impl/Makefile	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -0,0 +1,26 @@
+CFLAGS = -fexceptions -Wall -Werror -g
+CC = gcc
+
+all: except-pic except-pdc
+
+clean:
+	rm -fv except-pic except-pdc *.o *.so
+
+pic.s: test.c Makefile
+	$(CC) $(CFLAGS) -fPIC -S -o $@ $<
+
+pdc.s: test.c Makefile
+	$(CC) $(CFLAGS) -S -o $@ $<
+
+except-pdc: test-main.c exception.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+exception.s: exception.c
+	$(CC) $(CFLAGS) -S -o $@ -fPIC $^
+
+libexcept.so: exception.c
+	$(CC) $(CFLAGS) -shared -o $@ -fPIC $^
+
+except-pic: test-main.c libexcept.so
+	$(CC) $(CFLAGS) -o $@ $< -L. -lexcept
+
Index: doc/working/exception/impl/exception.c
===================================================================
--- doc/working/exception/impl/exception.c	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ doc/working/exception/impl/exception.c	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -243,5 +243,5 @@
 
 					// Get a function pointer from the relative offset and call it
-					// _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;					
+					// _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;
 
 					_Unwind_Reason_Code (*matcher)() =
@@ -320,7 +320,13 @@
 	// on how the assembly works.
 	// Setup the personality routine
+	#if defined(__PIC__)
+	asm volatile (".cfi_personality 0x9b,CFA.ref.__gcfa_personality_v0");
+	// Setup the exception table
+	asm volatile (".cfi_lsda 0x1b, .LLSDACFA2");
+	#else
 	asm volatile (".cfi_personality 0x3,__gcfa_personality_v0");
 	// Setup the exception table
 	asm volatile (".cfi_lsda 0x3, .LLSDACFA2");
+	#endif
 
 	// Label which defines the start of the area for which the handler is setup
@@ -356,4 +362,39 @@
 // Some more works need to be done if we want to have a single
 // call to the try routine
+#if defined(__PIC__)
+asm (
+	//HEADER
+	".LFECFA1:\n"
+	"	.globl	__gcfa_personality_v0\n"
+	"	.section	.gcc_except_table,\"a\",@progbits\n"
+	".LLSDACFA2:\n"							//TABLE header
+	"	.byte	0xff\n"
+	"	.byte	0xff\n"
+	"	.byte	0x1\n"
+	"	.uleb128 .LLSDACSECFA2-.LLSDACSBCFA2\n"		// BODY length
+	// Body uses language specific data and therefore could be modified arbitrarily
+	".LLSDACSBCFA2:\n"						// BODY start
+	"	.uleb128 .TRYSTART-__try_terminate\n"		// Handled area start  (relative to start of function)
+	"	.uleb128 .TRYEND-.TRYSTART\n"				// Handled area length
+	"	.uleb128 .CATCH-__try_terminate\n"			// Handler landing pad adress  (relative to start of function)
+	"	.uleb128 1\n"						// Action code, gcc seems to use always 0
+	".LLSDACSECFA2:\n"						// BODY end
+	"	.text\n"							// TABLE footer
+	"	.size	__try_terminate, .-__try_terminate\n"
+);
+
+// Somehow this piece of helps with the resolution of debug symbols.
+__attribute__((unused)) static const int dummy = 0;
+asm (
+	"	.hidden	CFA.ref.__gcfa_personality_v0\n"	// Declare an new hidden symbol
+	"	.weak	CFA.ref.__gcfa_personality_v0\n"
+	"	.section	.data.rel.local.CFA.ref.__gcfa_personality_v0,\"awG\",@progbits,CFA.ref.__gcfa_personality_v0,comdat\n"	// No clue what this does specifically
+	"	.align 8\n"
+	"	.type CFA.ref.__gcfa_personality_v0, @object\n"	// Type of our hidden symbol (it's not actually the function itself)
+	"	.size CFA.ref.__gcfa_personality_v0, 8\n"		// Size of our hidden symbol
+	"CFA.ref.__gcfa_personality_v0:\n"
+	"	.quad __gcfa_personality_v0\n"
+);
+#else
 asm (
 	//HEADER
@@ -375,5 +416,4 @@
 	"	.text\n"							// TABLE footer
 	"	.size	__try_terminate, .-__try_terminate\n"
-	"	.ident	\"GCC: (Ubuntu 6.2.0-3ubuntu11~16.04) 6.2.0 20160901\"\n"
-//	"	.section	.note.GNU-stack,\"x\",@progbits\n"
 );
+#endif
Index: c/working/exception/impl/nopic.s
===================================================================
--- doc/working/exception/impl/nopic.s	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ 	(revision )
@@ -1,104 +1,0 @@
-	.file	"test.c"
-	.text
-	.globl	clean
-	.type	clean, @function
-clean:
-.LFB0:
-	.cfi_startproc
-	pushq	%rbp
-	.cfi_def_cfa_offset 16
-	.cfi_offset 6, -16
-	movq	%rsp, %rbp
-	.cfi_def_cfa_register 6
-	movq	%rdi, -8(%rbp)
-	nop
-	popq	%rbp
-	.cfi_def_cfa 7, 8
-	ret
-	.cfi_endproc
-.LFE0:
-	.size	clean, .-clean
-	.globl	foo
-	.type	foo, @function
-foo:
-.LFB1:
-	.cfi_startproc
-	.cfi_personality 0x3,__gcc_personality_v0
-	.cfi_lsda 0x3,.LLSDA1
-	pushq	%rbp
-	.cfi_def_cfa_offset 16
-	.cfi_offset 6, -16
-	movq	%rsp, %rbp
-	.cfi_def_cfa_register 6
-	pushq	%r13
-	pushq	%r12
-	pushq	%rbx
-	subq	$40, %rsp
-	.cfi_offset 13, -24
-	.cfi_offset 12, -32
-	.cfi_offset 3, -40
-	movl	%edi, -52(%rbp)
-	movq	%fs:40, %rax
-	movq	%rax, -40(%rbp)
-	xorl	%eax, %eax
-	movl	-52(%rbp), %eax
-	movl	%eax, %edi
-.LEHB0:
-	call	bar
-.LEHE0:
-	movl	%eax, %r13d
-	movl	$0, %r12d
-.L7:
-	leaq	-44(%rbp), %rax
-	movq	%rax, %rdi
-	call	clean
-	cmpl	$1, %r12d
-	je	.L4
-	movl	%r13d, %eax
-	movq	-40(%rbp), %rdx
-	xorq	%fs:40, %rdx
-	je	.L8
-	jmp	.L10
-.L9:
-	movq	%rax, %rbx
-	movl	$1, %r12d
-	jmp	.L7
-.L4:
-	movq	%rbx, %rax
-	movq	%rax, %rdi
-.LEHB1:
-	call	_Unwind_Resume
-.LEHE1:
-.L10:
-	call	__stack_chk_fail
-.L8:
-	addq	$40, %rsp
-	popq	%rbx
-	popq	%r12
-	popq	%r13
-	popq	%rbp
-	.cfi_def_cfa 7, 8
-	ret
-	.cfi_endproc
-.LFE1:
-	.globl	__gcc_personality_v0
-	.section	.gcc_except_table,"a",@progbits
-.LLSDA1:
-	.byte	0xff
-	.byte	0xff
-	.byte	0x1
-	.uleb128 .LLSDACSE1-.LLSDACSB1
-.LLSDACSB1:
-	.uleb128 .LEHB0-.LFB1
-	.uleb128 .LEHE0-.LEHB0
-	.uleb128 .L9-.LFB1
-	.uleb128 0
-	.uleb128 .LEHB1-.LFB1
-	.uleb128 .LEHE1-.LEHB1
-	.uleb128 0
-	.uleb128 0
-.LLSDACSE1:
-	.text
-	.size	foo, .-foo
-	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
-	.section	.note.GNU-stack,"",@progbits
Index: doc/working/exception/impl/pdc.s
===================================================================
--- doc/working/exception/impl/pdc.s	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
+++ doc/working/exception/impl/pdc.s	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -0,0 +1,104 @@
+	.file	"test.c"
+	.text
+	.globl	clean
+	.type	clean, @function
+clean:
+.LFB0:
+	.cfi_startproc
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	movq	%rdi, -8(%rbp)
+	nop
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE0:
+	.size	clean, .-clean
+	.globl	foo
+	.type	foo, @function
+foo:
+.LFB1:
+	.cfi_startproc
+	.cfi_personality 0x3,__gcc_personality_v0
+	.cfi_lsda 0x3,.LLSDA1
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset 6, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register 6
+	pushq	%r13
+	pushq	%r12
+	pushq	%rbx
+	subq	$40, %rsp
+	.cfi_offset 13, -24
+	.cfi_offset 12, -32
+	.cfi_offset 3, -40
+	movl	%edi, -52(%rbp)
+	movq	%fs:40, %rax
+	movq	%rax, -40(%rbp)
+	xorl	%eax, %eax
+	movl	-52(%rbp), %eax
+	movl	%eax, %edi
+.LEHB0:
+	call	bar
+.LEHE0:
+	movl	%eax, %r13d
+	movl	$0, %r12d
+.L7:
+	leaq	-44(%rbp), %rax
+	movq	%rax, %rdi
+	call	clean
+	cmpl	$1, %r12d
+	je	.L4
+	movl	%r13d, %eax
+	movq	-40(%rbp), %rdx
+	xorq	%fs:40, %rdx
+	je	.L8
+	jmp	.L10
+.L9:
+	movq	%rax, %rbx
+	movl	$1, %r12d
+	jmp	.L7
+.L4:
+	movq	%rbx, %rax
+	movq	%rax, %rdi
+.LEHB1:
+	call	_Unwind_Resume
+.LEHE1:
+.L10:
+	call	__stack_chk_fail
+.L8:
+	addq	$40, %rsp
+	popq	%rbx
+	popq	%r12
+	popq	%r13
+	popq	%rbp
+	.cfi_def_cfa 7, 8
+	ret
+	.cfi_endproc
+.LFE1:
+	.globl	__gcc_personality_v0
+	.section	.gcc_except_table,"a",@progbits
+.LLSDA1:
+	.byte	0xff
+	.byte	0xff
+	.byte	0x1
+	.uleb128 .LLSDACSE1-.LLSDACSB1
+.LLSDACSB1:
+	.uleb128 .LEHB0-.LFB1
+	.uleb128 .LEHE0-.LEHB0
+	.uleb128 .L9-.LFB1
+	.uleb128 0
+	.uleb128 .LEHB1-.LFB1
+	.uleb128 .LEHE1-.LEHB1
+	.uleb128 0
+	.uleb128 0
+.LLSDACSE1:
+	.text
+	.size	foo, .-foo
+	.ident	"GCC: (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0"
+	.section	.note.GNU-stack,"",@progbits
Index: doc/working/exception/impl/pic.s
===================================================================
--- doc/working/exception/impl/pic.s	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ doc/working/exception/impl/pic.s	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -1,8 +1,11 @@
 	.file	"test.c"
 	.text
+.Ltext0:
 	.globl	clean
 	.type	clean, @function
 clean:
 .LFB0:
+	.file 1 "test.c"
+	.loc 1 1 0
 	.cfi_startproc
 	pushq	%rbp
@@ -12,4 +15,5 @@
 	.cfi_def_cfa_register 6
 	movq	%rdi, -8(%rbp)
+	.loc 1 1 0
 	nop
 	popq	%rbp
@@ -23,4 +27,5 @@
 foo:
 .LFB1:
+	.loc 1 4 0
 	.cfi_startproc
 	.cfi_personality 0x9b,DW.ref.__gcc_personality_v0
@@ -39,7 +44,9 @@
 	.cfi_offset 3, -40
 	movl	%edi, -52(%rbp)
+	.loc 1 4 0
 	movq	%fs:40, %rax
 	movq	%rax, -40(%rbp)
 	xorl	%eax, %eax
+	.loc 1 6 0
 	movl	-52(%rbp), %eax
 	movl	%eax, %edi
@@ -50,4 +57,5 @@
 	movl	$0, %r12d
 .L7:
+	.loc 1 5 0
 	leaq	-44(%rbp), %rax
 	movq	%rax, %rdi
@@ -56,5 +64,7 @@
 	cmpl	$1, %r12d
 	je	.L4
+	.loc 1 6 0
 	movl	%r13d, %eax
+	.loc 1 7 0
 	movq	-40(%rbp), %rdx
 	xorq	%fs:40, %rdx
@@ -64,4 +74,5 @@
 	movq	%rax, %rbx
 	movl	$1, %r12d
+	.loc 1 5 0
 	jmp	.L7
 .L4:
@@ -71,4 +82,5 @@
 .LEHE1:
 .L10:
+	.loc 1 7 0
 	call	__stack_chk_fail@PLT
 .L8:
@@ -101,7 +113,222 @@
 	.text
 	.size	foo, .-foo
+.Letext0:
+	.section	.debug_info,"",@progbits
+.Ldebug_info0:
+	.long	0x9c
+	.value	0x4
+	.long	.Ldebug_abbrev0
+	.byte	0x8
+	.uleb128 0x1
+	.long	.LASF0
+	.byte	0xc
+	.long	.LASF1
+	.long	.LASF2
+	.quad	.Ltext0
+	.quad	.Letext0-.Ltext0
+	.long	.Ldebug_line0
+	.uleb128 0x2
+	.string	"foo"
+	.byte	0x1
+	.byte	0x4
+	.long	0x68
+	.quad	.LFB1
+	.quad	.LFE1-.LFB1
+	.uleb128 0x1
+	.byte	0x9c
+	.long	0x68
+	.uleb128 0x3
+	.string	"x"
+	.byte	0x1
+	.byte	0x4
+	.long	0x68
+	.uleb128 0x3
+	.byte	0x91
+	.sleb128 -68
+	.uleb128 0x4
+	.string	"i"
+	.byte	0x1
+	.byte	0x5
+	.long	0x68
+	.uleb128 0x2
+	.byte	0x91
+	.sleb128 -60
+	.byte	0
+	.uleb128 0x5
+	.byte	0x4
+	.byte	0x5
+	.string	"int"
+	.uleb128 0x6
+	.long	.LASF3
+	.byte	0x1
+	.byte	0x1
+	.quad	.LFB0
+	.quad	.LFE0-.LFB0
+	.uleb128 0x1
+	.byte	0x9c
+	.long	0x99
+	.uleb128 0x3
+	.string	"p"
+	.byte	0x1
+	.byte	0x1
+	.long	0x99
+	.uleb128 0x2
+	.byte	0x91
+	.sleb128 -24
+	.byte	0
+	.uleb128 0x7
+	.byte	0x8
+	.long	0x68
+	.byte	0
+	.section	.debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+	.uleb128 0x1
+	.uleb128 0x11
+	.byte	0x1
+	.uleb128 0x25
+	.uleb128 0xe
+	.uleb128 0x13
+	.uleb128 0xb
+	.uleb128 0x3
+	.uleb128 0xe
+	.uleb128 0x1b
+	.uleb128 0xe
+	.uleb128 0x11
+	.uleb128 0x1
+	.uleb128 0x12
+	.uleb128 0x7
+	.uleb128 0x10
+	.uleb128 0x17
+	.byte	0
+	.byte	0
+	.uleb128 0x2
+	.uleb128 0x2e
+	.byte	0x1
+	.uleb128 0x3f
+	.uleb128 0x19
+	.uleb128 0x3
+	.uleb128 0x8
+	.uleb128 0x3a
+	.uleb128 0xb
+	.uleb128 0x3b
+	.uleb128 0xb
+	.uleb128 0x27
+	.uleb128 0x19
+	.uleb128 0x49
+	.uleb128 0x13
+	.uleb128 0x11
+	.uleb128 0x1
+	.uleb128 0x12
+	.uleb128 0x7
+	.uleb128 0x40
+	.uleb128 0x18
+	.uleb128 0x2116
+	.uleb128 0x19
+	.uleb128 0x1
+	.uleb128 0x13
+	.byte	0
+	.byte	0
+	.uleb128 0x3
+	.uleb128 0x5
+	.byte	0
+	.uleb128 0x3
+	.uleb128 0x8
+	.uleb128 0x3a
+	.uleb128 0xb
+	.uleb128 0x3b
+	.uleb128 0xb
+	.uleb128 0x49
+	.uleb128 0x13
+	.uleb128 0x2
+	.uleb128 0x18
+	.byte	0
+	.byte	0
+	.uleb128 0x4
+	.uleb128 0x34
+	.byte	0
+	.uleb128 0x3
+	.uleb128 0x8
+	.uleb128 0x3a
+	.uleb128 0xb
+	.uleb128 0x3b
+	.uleb128 0xb
+	.uleb128 0x49
+	.uleb128 0x13
+	.uleb128 0x2
+	.uleb128 0x18
+	.byte	0
+	.byte	0
+	.uleb128 0x5
+	.uleb128 0x24
+	.byte	0
+	.uleb128 0xb
+	.uleb128 0xb
+	.uleb128 0x3e
+	.uleb128 0xb
+	.uleb128 0x3
+	.uleb128 0x8
+	.byte	0
+	.byte	0
+	.uleb128 0x6
+	.uleb128 0x2e
+	.byte	0x1
+	.uleb128 0x3f
+	.uleb128 0x19
+	.uleb128 0x3
+	.uleb128 0xe
+	.uleb128 0x3a
+	.uleb128 0xb
+	.uleb128 0x3b
+	.uleb128 0xb
+	.uleb128 0x27
+	.uleb128 0x19
+	.uleb128 0x11
+	.uleb128 0x1
+	.uleb128 0x12
+	.uleb128 0x7
+	.uleb128 0x40
+	.uleb128 0x18
+	.uleb128 0x2117
+	.uleb128 0x19
+	.uleb128 0x1
+	.uleb128 0x13
+	.byte	0
+	.byte	0
+	.uleb128 0x7
+	.uleb128 0xf
+	.byte	0
+	.uleb128 0xb
+	.uleb128 0xb
+	.uleb128 0x49
+	.uleb128 0x13
+	.byte	0
+	.byte	0
+	.byte	0
+	.section	.debug_aranges,"",@progbits
+	.long	0x2c
+	.value	0x2
+	.long	.Ldebug_info0
+	.byte	0x8
+	.byte	0
+	.value	0
+	.value	0
+	.quad	.Ltext0
+	.quad	.Letext0-.Ltext0
+	.quad	0
+	.quad	0
+	.section	.debug_line,"",@progbits
+.Ldebug_line0:
+	.section	.debug_str,"MS",@progbits,1
+.LASF0:
+	.string	"GNU C11 7.4.0 -mtune=generic -march=x86-64 -g -fexceptions -fPIC -fstack-protector-strong"
+.LASF2:
+	.string	"/home/tdelisle/workspace/cforall/main/doc/working/exception/impl"
+.LASF1:
+	.string	"test.c"
+.LASF3:
+	.string	"clean"
 	.hidden	DW.ref.__gcc_personality_v0
 	.weak	DW.ref.__gcc_personality_v0
-	.section	.data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
+	.section	.data.rel.local.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
 	.align 8
 	.type	DW.ref.__gcc_personality_v0, @object
@@ -109,4 +336,4 @@
 DW.ref.__gcc_personality_v0:
 	.quad	__gcc_personality_v0
-	.ident	"GCC: (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0"
+	.ident	"GCC: (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0"
 	.section	.note.GNU-stack,"",@progbits
Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -83,5 +83,5 @@
 
 void ^?{}(coroutine_desc& this) {
-      if(this.state != Halted) {
+      if(this.state != Halted && this.state != Start) {
             coroutine_desc * src = TL_GET( this_coroutine );
             coroutine_desc * dst = &this;
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/Concurrency/Keywords.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -575,5 +575,5 @@
 
 		//in reverse order :
-		// monitor_guard_t __guard = { __monitors, #, func };
+		// monitor_dtor_guard_t __guard = { __monitors, func };
 		body->push_front(
 			new DeclStmt( new ObjectDecl(
@@ -634,5 +634,5 @@
 		assert(generic_func);
 
-		//in reverse order :
+		// in reverse order :
 		// monitor_guard_t __guard = { __monitors, #, func };
 		body->push_front(
Index: src/Concurrency/Waitfor.cc
===================================================================
--- src/Concurrency/Waitfor.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/Concurrency/Waitfor.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -66,33 +66,34 @@
 void foo() {
 	while( true ) {
-
-		acceptable_t acceptables[3];
-		if( a < 1 ) {
-			acceptables[0].func = f;
-			acceptables[0].mon = a;
-		}
-		acceptables[1].func = g;
-		acceptables[1].mon = a;
-
-		acceptables[2].func = f;
-		acceptables[2].mon = a;
-		acceptables[2].is_dtor = true;
-
-		int ret = waitfor_internal( acceptables, swagl() );
-
-		switch( ret ) {
-			case 0:
-			{
-				bar();
+		{
+			acceptable_t acceptables[3];
+			if( a < 1 ) {
+				acceptables[0].func = f;
+				acceptables[0].mon = a;
 			}
-			case 1:
-			{
-				baz();
+			acceptables[1].func = g;
+			acceptables[1].mon = a;
+
+			acceptables[2].func = f;
+			acceptables[2].mon = a;
+			acceptables[2].is_dtor = true;
+
+			int ret = waitfor_internal( acceptables, swagl() );
+
+			switch( ret ) {
+				case 0:
+				{
+					bar();
+				}
+				case 1:
+				{
+					baz();
+				}
+				case 2:
+					signal(a);
+					{
+						break;
+					}
 			}
-			case 2:
-				signal(a);
-				{
-					break;
-				}
 		}
 	}
@@ -555,9 +556,11 @@
 					new ConstantExpr( Constant::from_ulong( i++ ) ),
 					{
-						clause.statement,
-						new BranchStmt(
-							"",
-							BranchStmt::Break
-						)
+						new CompoundStmt({
+							clause.statement,
+							new BranchStmt(
+								"",
+								BranchStmt::Break
+							)
+						})
 					}
 				)
@@ -570,9 +573,11 @@
 					new ConstantExpr( Constant::from_int( -2 ) ),
 					{
-						waitfor->timeout.statement,
-						new BranchStmt(
-							"",
-							BranchStmt::Break
-						)
+						new CompoundStmt({
+							waitfor->timeout.statement,
+							new BranchStmt(
+								"",
+								BranchStmt::Break
+							)
+						})
 					}
 				)
@@ -585,9 +590,11 @@
 					new ConstantExpr( Constant::from_int( -1 ) ),
 					{
-						waitfor->orelse.statement,
-						new BranchStmt(
-							"",
-							BranchStmt::Break
-						)
+						new CompoundStmt({
+							waitfor->orelse.statement,
+							new BranchStmt(
+								"",
+								BranchStmt::Break
+							)
+						})
 					}
 				)
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/Parser/TypeData.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -322,5 +322,5 @@
 			function.params->printList( os, indent + 4 );
 		} else {
-			os << string( indent + 2, ' ' ) << "with no parameters " << endl;
+			os << string( indent + 2, ' ' ) << "with no parameters" << endl;
 		} // if
 		if ( function.idList ) {
@@ -347,17 +347,17 @@
 		os << DeclarationNode::aggregateNames[ aggregate.kind ] << ' ' << *aggregate.name << endl;
 		if ( aggregate.params ) {
-			os << string( indent + 2, ' ' ) << "with type parameters " << endl;
+			os << string( indent + 2, ' ' ) << "with type parameters" << endl;
 			aggregate.params->printList( os, indent + 4 );
 		} // if
 		if ( aggregate.actuals ) {
-			os << string( indent + 2, ' ' ) << "instantiated with actual parameters " << endl;
+			os << string( indent + 2, ' ' ) << "instantiated with actual parameters" << endl;
 			aggregate.actuals->printList( os, indent + 4 );
 		} // if
 		if ( aggregate.fields ) {
-			os << string( indent + 2, ' ' ) << "with members " << endl;
+			os << string( indent + 2, ' ' ) << "with members" << endl;
 			aggregate.fields->printList( os, indent + 4 );
 		} // if
 		if ( aggregate.body ) {
-			os << string( indent + 2, ' ' ) << " with body " << endl;
+			os << string( indent + 2, ' ' ) << " with body" << endl;
 		} // if
 		break;
@@ -370,5 +370,5 @@
 		} // if
 		if ( aggInst.params ) {
-			os << string( indent + 2, ' ' ) << "with parameters " << endl;
+			os << string( indent + 2, ' ' ) << "with parameters" << endl;
 			aggInst.params->printList( os, indent + 2 );
 		} // if
@@ -381,5 +381,5 @@
 		} // if
 		if ( enumeration.body ) {
-			os << string( indent + 2, ' ' ) << " with body " << endl;
+			os << string( indent + 2, ' ' ) << " with body" << endl;
 		} // if
 		break;
@@ -418,5 +418,5 @@
 		os << "tuple ";
 		if ( tuple ) {
-			os << "with members " << endl;
+			os << "with members" << endl;
 			tuple->printList( os, indent + 2 );
 		} // if
@@ -942,5 +942,5 @@
 	assert( td->typeexpr );
 	// assert( td->typeexpr->expr );
-	return new TypeofType{ 
+	return new TypeofType{
 		buildQualifiers( td ), td->typeexpr->build(), td->kind == TypeData::Basetypeof };
 } // buildTypeof
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/SynTree/Expression.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -456,8 +456,8 @@
 
 void UntypedExpr::print( std::ostream &os, Indenter indent ) const {
-	os << "Applying untyped: " << std::endl;
+	os << "Applying untyped:" << std::endl;
 	os << indent+1;
 	function->print(os, indent+1);
-	os << std::endl << indent << "...to: " << std::endl;
+	os << std::endl << indent << "...to:" << std::endl;
 	printAll(args, os, indent+1);
 	Expression::print( os, indent );
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/SynTree/ReferenceToType.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -205,5 +205,5 @@
 
 	Type::print( os, indent );
-	os << "instance of " << typeString() << " " << get_name() << " (" << ( isFtype ? "" : "not" ) << " function type) ";
+	os << "instance of " << typeString() << " " << get_name() << " (" << ( isFtype ? "" : "not" ) << " function type)";
 	if ( ! parameters.empty() ) {
 		os << endl << indent << "... with parameters" << endl;
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ src/SynTree/Type.cc	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -118,5 +118,5 @@
 
 void QualifiedType::print( std::ostream & os, Indenter indent ) const {
-	os << "Qualified Type: " << endl;
+	os << "Qualified Type:" << endl;
 	os << indent+1;
 	parent->print( os, indent+1 );
Index: tests/.expect/alloc-ERROR.txt
===================================================================
--- tests/.expect/alloc-ERROR.txt	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ tests/.expect/alloc-ERROR.txt	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -1,17 +1,17 @@
-alloc.cfa:265:1 error: No reasonable alternatives for expression Applying untyped: 
+alloc.cfa:265:1 error: No reasonable alternatives for expression Applying untyped:
   Name: ?=?
-...to: 
+...to:
   Name: p
-  Applying untyped: 
+  Applying untyped:
     Name: realloc
-  ...to: 
+  ...to:
     Name: stp
-    Applying untyped: 
+    Applying untyped:
       Name: ?*?
-    ...to: 
+    ...to:
       Name: dim
-      Sizeof Expression on: Applying untyped: 
+      Sizeof Expression on: Applying untyped:
           Name: *?
-        ...to: 
+        ...to:
           Name: stp
 
@@ -19,19 +19,19 @@
 
 
-alloc.cfa:266:1 error: No reasonable alternatives for expression Applying untyped: 
+alloc.cfa:266:1 error: No reasonable alternatives for expression Applying untyped:
   Name: ?=?
-...to: 
+...to:
   Name: p
-  Applying untyped: 
+  Applying untyped:
     Name: alloc
-  ...to: 
+  ...to:
     Name: stp
-    Applying untyped: 
+    Applying untyped:
       Name: ?*?
-    ...to: 
+    ...to:
       Name: dim
-      Sizeof Expression on: Applying untyped: 
+      Sizeof Expression on: Applying untyped:
           Name: *?
-        ...to: 
+        ...to:
           Name: stp
 
@@ -39,22 +39,22 @@
 
 
-alloc.cfa:267:1 error: No reasonable alternatives for expression Applying untyped: 
+alloc.cfa:267:1 error: No reasonable alternatives for expression Applying untyped:
   Name: ?=?
-...to: 
+...to:
   Name: p
-  Applying untyped: 
+  Applying untyped:
     Name: memset
-  ...to: 
+  ...to:
     Name: stp
     constant expression (10 10: signed int)
 
 
-alloc.cfa:268:1 error: No reasonable alternatives for expression Applying untyped: 
+alloc.cfa:268:1 error: No reasonable alternatives for expression Applying untyped:
   Name: ?=?
-...to: 
+...to:
   Name: p
-  Applying untyped: 
+  Applying untyped:
     Name: memcpy
-  ...to: 
+  ...to:
     Address of:
       Name: st1
Index: tests/.expect/completeTypeError.txt
===================================================================
--- tests/.expect/completeTypeError.txt	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ tests/.expect/completeTypeError.txt	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -1,45 +1,45 @@
-completeTypeError.cfa:33:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:33:1 error: No reasonable alternatives for expression Applying untyped:
   Name: *?
-...to: 
+...to:
   Name: v
 
-completeTypeError.cfa:34:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:34:1 error: No reasonable alternatives for expression Applying untyped:
   Name: *?
-...to: 
+...to:
   Name: y
 
-completeTypeError.cfa:35:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:35:1 error: No reasonable alternatives for expression Applying untyped:
   Name: foo
-...to: 
+...to:
   Name: v
 
-completeTypeError.cfa:36:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:36:1 error: No reasonable alternatives for expression Applying untyped:
   Name: baz
-...to: 
+...to:
   Name: v
 
-completeTypeError.cfa:37:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:37:1 error: No reasonable alternatives for expression Applying untyped:
   Name: quux
-...to: 
+...to:
   Name: v
 
-completeTypeError.cfa:58:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:58:1 error: No reasonable alternatives for expression Applying untyped:
   Name: baz
-...to: 
+...to:
   Name: y
 
-completeTypeError.cfa:59:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:59:1 error: No reasonable alternatives for expression Applying untyped:
   Name: quux
-...to: 
+...to:
   Name: y
 
-completeTypeError.cfa:60:1 error: No reasonable alternatives for expression Applying untyped: 
+completeTypeError.cfa:60:1 error: No reasonable alternatives for expression Applying untyped:
   Name: *?
-...to: 
+...to:
   Name: y
 
-completeTypeError.cfa:72:1 error: No resolvable alternatives for expression Applying untyped: 
+completeTypeError.cfa:72:1 error: No resolvable alternatives for expression Applying untyped:
   Name: baz
-...to: 
+...to:
   Name: z
 
@@ -51,8 +51,8 @@
          ?=?: pointer to function
          ... with parameters
-           reference to instance of type T (not function type) 
-           instance of type T (not function type) 
+           reference to instance of type T (not function type)
+           instance of type T (not function type)
          ... returning
-           _retval__operator_assign: instance of type T (not function type) 
+           _retval__operator_assign: instance of type T (not function type)
            ... with attributes:
              Attribute with name: unused
@@ -61,16 +61,16 @@
          ?{}: pointer to function
          ... with parameters
-           reference to instance of type T (not function type) 
+           reference to instance of type T (not function type)
          ... returning nothing
 
          ?{}: pointer to function
          ... with parameters
-           reference to instance of type T (not function type) 
-           instance of type T (not function type) 
+           reference to instance of type T (not function type)
+           instance of type T (not function type)
          ... returning nothing
 
          ^?{}: pointer to function
          ... with parameters
-           reference to instance of type T (not function type) 
+           reference to instance of type T (not function type)
          ... returning nothing
 
@@ -78,14 +78,14 @@
        function
      ... with parameters
-       pointer to instance of type T (not function type) 
+       pointer to instance of type T (not function type)
      ... returning nothing
 
    ... to arguments
-     Variable Expression: z: pointer to instance of type T (not function type) 
+     Variable Expression: z: pointer to instance of type T (not function type)
 
  (types:
    void 
  )
- Environment:( _73_0_T ) -> instance of type T (not function type)  (no widening)
+ Environment:( _73_0_T ) -> instance of type T (not function type) (no widening)
 
 
Index: tests/.expect/declarationErrors.txt
===================================================================
--- tests/.expect/declarationErrors.txt	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ tests/.expect/declarationErrors.txt	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -6,13 +6,13 @@
 
 declarationErrors.cfa:19:1 error: duplicate static in declaration of x4: static const volatile instance of const volatile struct __anonymous0
-  with members 
+  with members
     i: int 
-   with body 
+   with body
 
 
 declarationErrors.cfa:20:1 error: duplicate const, duplicate static, duplicate volatile in declaration of x5: static const volatile instance of const volatile struct __anonymous1
-  with members 
+  with members
     i: int 
-   with body 
+   with body
 
 
@@ -20,50 +20,50 @@
 
 declarationErrors.cfa:24:1 error: duplicate const in declaration of f01: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:25:1 error: duplicate volatile in declaration of f02: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:26:1 error: duplicate const in declaration of f03: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:27:1 error: duplicate volatile in declaration of f04: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:28:1 error: duplicate const in declaration of f05: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:29:1 error: duplicate volatile in declaration of f06: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:30:1 error: duplicate const in declaration of f07: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:31:1 error: duplicate const, duplicate volatile in declaration of f08: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:33:1 error: duplicate const, duplicate volatile in declaration of f09: static inline function
-  with no parameters 
+  with no parameters
   returning const volatile int 
 
 
 declarationErrors.cfa:34:1 error: duplicate const, duplicate _Atomic, duplicate _Atomic, duplicate const, duplicate restrict, duplicate volatile in declaration of f09: static inline function
-  with no parameters 
+  with no parameters
   returning const restrict volatile _Atomic int 
 
Index: tests/.expect/nested-types-ERR2.txt
===================================================================
--- tests/.expect/nested-types-ERR2.txt	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ tests/.expect/nested-types-ERR2.txt	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -1,6 +1,6 @@
 nested-types.cfa:73:1 error: Use of undefined global type Z
 nested-types.cfa:74:1 error: Qualified type requires an aggregate on the left, but has: signed int
-nested-types.cfa:75:1 error: Undefined type in qualified type: Qualified Type: 
+nested-types.cfa:75:1 error: Undefined type in qualified type: Qualified Type:
   instance of struct S with body 1
-  instance of type Z (not function type) 
+  instance of type Z (not function type)
 
Index: tests/concurrent/examples/datingService.cfa
===================================================================
--- tests/concurrent/examples/datingService.cfa	(revision def9d4ece42b49cbb4f90f08f458811fe82b1e3f)
+++ tests/concurrent/examples/datingService.cfa	(revision 273ff104d0fe14178bd950a02b3c6f739a9ca212)
@@ -33,4 +33,5 @@
 		signal_block( Boys[ccode] );					// restart boy to set phone number
 	} // if
+	sout | "Girl:" | PhoneNo | "is dating Boy at" | BoyPhoneNo | "with ccode" | ccode;
 	return BoyPhoneNo;
 } // DatingService girl
@@ -44,4 +45,5 @@
 		signal_block( Girls[ccode] );					// restart girl to set phone number
 	} // if
+	sout | " Boy:" | PhoneNo | "is dating Girl" | GirlPhoneNo | "with ccode" | ccode;
 	return GirlPhoneNo;
 } // DatingService boy
@@ -58,5 +60,4 @@
 	yield( random( 100 ) );								// don't all start at the same time
 	unsigned int partner = girl( TheExchange, id, ccode );
-	sout | "Girl:" | id | "is dating Boy at" | partner | "with ccode" | ccode;
 	girlck[id] = partner;
 } // Girl main
@@ -76,5 +77,4 @@
 	yield( random( 100 ) );								// don't all start at the same time
 	unsigned int partner = boy( TheExchange, id, ccode );
-	sout | " Boy:" | id | "is dating Girl" | partner | "with ccode" | ccode;
 	boyck[id] = partner;
 } // Boy main
