Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 033ff3711d4010b2ccdeb4a02f5a7a01b1512ca6)
+++ src/AST/Convert.cpp	(revision 2cd949bdf646e348c3d82fdbc4bc3da895676621)
@@ -887,5 +887,5 @@
 		auto expr = visitBaseExpr( node,
 			new AsmExpr(
-				get<Expression>().accept1(node->inout),
+				new std::string(node->inout),
 				get<Expression>().accept1(node->constraint),
 				get<Expression>().accept1(node->operand)
@@ -2258,5 +2258,5 @@
 			new ast::AsmExpr(
 				old->location,
-				GET_ACCEPT_1(inout, Expr),
+				old->inout,
 				GET_ACCEPT_1(constraint, Expr),
 				GET_ACCEPT_1(operand, Expr)
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 033ff3711d4010b2ccdeb4a02f5a7a01b1512ca6)
+++ src/AST/Expr.hpp	(revision 2cd949bdf646e348c3d82fdbc4bc3da895676621)
@@ -556,9 +556,9 @@
 class AsmExpr final : public Expr {
 public:
-	ptr<Expr> inout;
+	std::string inout;
 	ptr<Expr> constraint;
 	ptr<Expr> operand;
 
-	AsmExpr( const CodeLocation & loc, const Expr * io, const Expr * con, const Expr * op )
+	AsmExpr( const CodeLocation & loc, const std::string & io, const Expr * con, const Expr * op )
 	: Expr( loc ), inout( io ), constraint( con ), operand( op ) {}
 
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 033ff3711d4010b2ccdeb4a02f5a7a01b1512ca6)
+++ src/AST/Pass.impl.hpp	(revision 2cd949bdf646e348c3d82fdbc4bc3da895676621)
@@ -1300,5 +1300,4 @@
 			maybe_accept( node, &AsmExpr::result );
 		}
-		maybe_accept( node, &AsmExpr::inout      );
 		maybe_accept( node, &AsmExpr::constraint );
 		maybe_accept( node, &AsmExpr::operand    );
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 033ff3711d4010b2ccdeb4a02f5a7a01b1512ca6)
+++ src/AST/Print.cpp	(revision 2cd949bdf646e348c3d82fdbc4bc3da895676621)
@@ -1011,5 +1011,5 @@
 		os << "Asm Expression:" << endl;
 		++indent;
-		if ( node->inout ) node->inout->accept( *this );
+		if ( !node->inout.empty() ) os << "[" << node->inout << "] ";
 		if ( node->constraint ) node->constraint->accept( *this );
 		if ( node->operand ) node->operand->accept( *this );
