Index: src/SynTree/AddressExpr.cc
===================================================================
--- src/SynTree/AddressExpr.cc	(revision be9036d588c561590b98fa24451d88cd00ce0af1)
+++ src/SynTree/AddressExpr.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
@@ -70,4 +70,15 @@
 }
 
+LabelAddressExpr::LabelAddressExpr( const Label &arg ) : arg( arg ) {
+	// label address always has type void *
+	result = new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) );
+}
+LabelAddressExpr::LabelAddressExpr( const LabelAddressExpr & other ) : Expression( other ), arg( other.arg ) {}
+LabelAddressExpr::~LabelAddressExpr() {}
+
+void LabelAddressExpr::print( std::ostream & os, int indent ) const {
+	os << "Address of label:" << std::endl << std::string( indent+2, ' ' ) << arg;
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision be9036d588c561590b98fa24451d88cd00ce0af1)
+++ src/SynTree/Expression.h	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
@@ -24,4 +24,5 @@
 #include "Constant.h"             // for Constant
 #include "Initializer.h"          // for Designation (ptr only), Initializer
+#include "Label.h"                // for Label
 #include "Mutator.h"              // for Mutator
 #include "SynTree.h"              // for UniqueId
@@ -173,15 +174,13 @@
 };
 
-// xxx - this doesn't appear to actually be hooked in anywhere. We should use this instead of the "&&"" UntypedExpr hack
+// GCC &&label
+// https://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Labels-as-Values.html
 class LabelAddressExpr : public Expression {
   public:
-	Expression * arg;
-
-	LabelAddressExpr( Expression * arg );
+	Label arg;
+
+	LabelAddressExpr( const Label &arg );
 	LabelAddressExpr( const LabelAddressExpr & other );
 	virtual ~LabelAddressExpr();
-
-	Expression * get_arg() const { return arg; }
-	void set_arg(Expression * newValue ) { arg = newValue; }
 
 	virtual LabelAddressExpr * clone() const { return new LabelAddressExpr( * this ); }
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision be9036d588c561590b98fa24451d88cd00ce0af1)
+++ src/SynTree/Mutator.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
@@ -246,5 +246,4 @@
 	labelAddressExpr->set_env( maybeMutate( labelAddressExpr->get_env(), *this ) );
 	labelAddressExpr->set_result( maybeMutate( labelAddressExpr->get_result(), *this ) );
-	labelAddressExpr->set_arg( maybeMutate( labelAddressExpr->get_arg(), *this ) );
 	return labelAddressExpr;
 }
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision be9036d588c561590b98fa24451d88cd00ce0af1)
+++ src/SynTree/Visitor.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
@@ -205,5 +205,4 @@
 void Visitor::visit( LabelAddressExpr *labAddressExpr ) {
 	maybeAccept( labAddressExpr->get_result(), *this );
-	maybeAccept( labAddressExpr->get_arg(), *this );
 }
 
