diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
index fef418fd1322a0fbdb1ea0ee9a361b27873c0a48..7cb4dea5e0848070f5e188a1787ccb715446c5f2 100755
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -5,70 +5,73 @@ max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
 0:? Sequence
-0:12  Function Definition: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12    Function Parameters: 
-0:12      'VertexID' ( in 3-element array of uint)
-0:12      'OutputStream' ( out structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:13  Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:13    Function Parameters: 
+0:13      'VertexID' ( in 3-element array of uint)
+0:13      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:?     Sequence
-0:14      Branch: Return with expression
-0:14        's' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12  Function Definition: main( ( temp void)
-0:12    Function Parameters: 
+0:15      Sequence
+0:15        Sequence
+0:15          move second child to first child ( temp float)
+0:?             'OutputStream_clip0' ( out float Position)
+0:15            clip0: direct index for structure ( temp float)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( temp float)
+0:?                 'OutputStream_clip0' ( out 1-element array of float ClipDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              clip0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  1 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( temp float)
+0:?                 'OutputStream_cull0' ( out 1-element array of float CullDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              cull0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  2 (const int)
+0:15          move second child to first child ( temp uint)
+0:?             'OutputStream_vpai' ( out uint ViewportIndex)
+0:15            vpai: direct index for structure ( temp uint)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                3 (const int)
+0:15          move second child to first child ( temp uint)
+0:?             'OutputStream_rtai' ( out uint Layer)
+0:15            rtai: direct index for structure ( temp uint)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                4 (const int)
+0:15          move second child to first child ( temp int)
+0:15            ii: direct index for structure ( temp int)
+0:15              'OutputStream' (layout( location=0) out structure{ temp int ii})
+0:15              Constant:
+0:15                0 (const int)
+0:15            ii: direct index for structure ( temp int)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                5 (const int)
+0:15        EmitVertex ( temp void)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
 0:?     Sequence
-0:12      move second child to first child ( temp 3-element array of uint)
+0:13      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
-0:12      Sequence
-0:12        move second child to first child ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12          'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12          Function Call: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:?             'VertexID' ( temp 3-element array of uint)
-0:?             'OutputStream' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:?         Sequence
-0:12          move second child to first child ( temp float)
-0:12            direct index ( temp float)
-0:?               'OutputStream_clip0' ( out 1-element array of float ClipDistance)
-0:12              Constant:
-0:12                0 (const int)
-0:12            clip0: direct index for structure ( temp float)
-0:12              'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12              Constant:
-0:12                0 (const int)
-0:?         Sequence
-0:12          move second child to first child ( temp float)
-0:12            direct index ( temp float)
-0:?               'OutputStream_cull0' ( out 1-element array of float CullDistance)
-0:12              Constant:
-0:12                0 (const int)
-0:12            cull0: direct index for structure ( temp float)
-0:12              'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12              Constant:
-0:12                1 (const int)
-0:12        move second child to first child ( temp uint)
-0:?           'OutputStream_vpai' ( out uint ViewportIndex)
-0:12          vpai: direct index for structure ( temp uint)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              2 (const int)
-0:12        move second child to first child ( temp uint)
-0:?           'OutputStream_rtai' ( out uint Layer)
-0:12          rtai: direct index for structure ( temp uint)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              3 (const int)
-0:12        move second child to first child ( temp int)
-0:12          ii: direct index for structure ( temp int)
-0:12            '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12            Constant:
-0:12              0 (const int)
-0:12          ii: direct index for structure ( temp int)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              4 (const int)
+0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
-0:?     'OutputStream' (layout( location=1) out structure{ temp int ii})
+0:?     'OutputStream' (layout( location=0) out structure{ temp int ii})
 0:?     'OutputStream_clip0' ( out 1-element array of float ClipDistance)
 0:?     'OutputStream_cull0' ( out 1-element array of float CullDistance)
 0:?     'OutputStream_vpai' ( out uint ViewportIndex)
@@ -83,77 +86,80 @@ max_vertices = 4
 input primitive = triangles
 output primitive = line_strip
 0:? Sequence
-0:12  Function Definition: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12    Function Parameters: 
-0:12      'VertexID' ( in 3-element array of uint)
-0:12      'OutputStream' ( out structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:13  Function Definition: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:13    Function Parameters: 
+0:13      'VertexID' ( in 3-element array of uint)
+0:13      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:?     Sequence
-0:14      Branch: Return with expression
-0:14        's' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12  Function Definition: main( ( temp void)
-0:12    Function Parameters: 
+0:15      Sequence
+0:15        Sequence
+0:15          move second child to first child ( temp float)
+0:?             'OutputStream_clip0' ( out float Position)
+0:15            clip0: direct index for structure ( temp float)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                0 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( temp float)
+0:?                 'OutputStream_clip0' ( out 1-element array of float ClipDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              clip0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  1 (const int)
+0:?           Sequence
+0:15            move second child to first child ( temp float)
+0:15              direct index ( temp float)
+0:?                 'OutputStream_cull0' ( out 1-element array of float CullDistance)
+0:15                Constant:
+0:15                  0 (const int)
+0:15              cull0: direct index for structure ( temp float)
+0:15                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15                Constant:
+0:15                  2 (const int)
+0:15          move second child to first child ( temp uint)
+0:?             'OutputStream_vpai' ( out uint ViewportIndex)
+0:15            vpai: direct index for structure ( temp uint)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                3 (const int)
+0:15          move second child to first child ( temp uint)
+0:?             'OutputStream_rtai' ( out uint Layer)
+0:15            rtai: direct index for structure ( temp uint)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                4 (const int)
+0:15          move second child to first child ( temp int)
+0:15            ii: direct index for structure ( temp int)
+0:15              'OutputStream' (layout( location=0) out structure{ temp int ii})
+0:15              Constant:
+0:15                0 (const int)
+0:15            ii: direct index for structure ( temp int)
+0:15              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:15              Constant:
+0:15                5 (const int)
+0:15        EmitVertex ( temp void)
+0:13  Function Definition: main( ( temp void)
+0:13    Function Parameters: 
 0:?     Sequence
-0:12      move second child to first child ( temp 3-element array of uint)
+0:13      move second child to first child ( temp 3-element array of uint)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'VertexID' (layout( location=0) in 3-element array of uint)
-0:12      Sequence
-0:12        move second child to first child ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12          'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12          Function Call: @main(u1[3];struct-S-f1-f1-u1-u1-i11; ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:?             'VertexID' ( temp 3-element array of uint)
-0:?             'OutputStream' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:?         Sequence
-0:12          move second child to first child ( temp float)
-0:12            direct index ( temp float)
-0:?               'OutputStream_clip0' ( out 1-element array of float ClipDistance)
-0:12              Constant:
-0:12                0 (const int)
-0:12            clip0: direct index for structure ( temp float)
-0:12              'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12              Constant:
-0:12                0 (const int)
-0:?         Sequence
-0:12          move second child to first child ( temp float)
-0:12            direct index ( temp float)
-0:?               'OutputStream_cull0' ( out 1-element array of float CullDistance)
-0:12              Constant:
-0:12                0 (const int)
-0:12            cull0: direct index for structure ( temp float)
-0:12              'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12              Constant:
-0:12                1 (const int)
-0:12        move second child to first child ( temp uint)
-0:?           'OutputStream_vpai' ( out uint ViewportIndex)
-0:12          vpai: direct index for structure ( temp uint)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              2 (const int)
-0:12        move second child to first child ( temp uint)
-0:?           'OutputStream_rtai' ( out uint Layer)
-0:12          rtai: direct index for structure ( temp uint)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              3 (const int)
-0:12        move second child to first child ( temp int)
-0:12          ii: direct index for structure ( temp int)
-0:12            '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
-0:12            Constant:
-0:12              0 (const int)
-0:12          ii: direct index for structure ( temp int)
-0:12            'flattenTemp' ( temp structure{ temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
-0:12            Constant:
-0:12              4 (const int)
+0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:?         'VertexID' ( temp 3-element array of uint)
+0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
 0:?   Linker Objects
-0:?     '@entryPointOutput' (layout( location=0) out structure{ temp int ii})
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
-0:?     'OutputStream' (layout( location=1) out structure{ temp int ii})
+0:?     'OutputStream' (layout( location=0) out structure{ temp int ii})
 0:?     'OutputStream_clip0' ( out 1-element array of float ClipDistance)
 0:?     'OutputStream_cull0' ( out 1-element array of float CullDistance)
 0:?     'OutputStream_vpai' ( out uint ViewportIndex)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 71
+// Id's are bound by 68
 
                               Capability Geometry
                               Capability ClipDistance
@@ -161,7 +167,7 @@ output primitive = line_strip
                               Capability MultiViewport
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 4  "main" 25 37 44 50 55 61 70
+                              EntryPoint Geometry 4  "main" 20 29 34 40 45 51 60
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 Invocations 1
                               ExecutionMode 4 OutputLineStrip
@@ -170,37 +176,35 @@ output primitive = line_strip
                               Name 4  "main"
                               Name 12  "S"
                               MemberName 12(S) 0  "clip0"
-                              MemberName 12(S) 1  "cull0"
-                              MemberName 12(S) 2  "vpai"
-                              MemberName 12(S) 3  "rtai"
-                              MemberName 12(S) 4  "ii"
-                              Name 17  "@main(u1[3];struct-S-f1-f1-u1-u1-i11;"
+                              MemberName 12(S) 1  "clip0"
+                              MemberName 12(S) 2  "cull0"
+                              MemberName 12(S) 3  "vpai"
+                              MemberName 12(S) 4  "rtai"
+                              MemberName 12(S) 5  "ii"
+                              Name 17  "@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;"
                               Name 15  "VertexID"
                               Name 16  "OutputStream"
-                              Name 19  "s"
-                              Name 23  "VertexID"
-                              Name 25  "VertexID"
-                              Name 27  "flattenTemp"
-                              Name 28  "OutputStream"
-                              Name 29  "param"
-                              Name 31  "param"
-                              Name 37  "OutputStream_clip0"
-                              Name 44  "OutputStream_cull0"
-                              Name 50  "OutputStream_vpai"
-                              Name 55  "OutputStream_rtai"
-                              Name 59  "S"
-                              MemberName 59(S) 0  "ii"
-                              Name 61  "@entryPointOutput"
-                              Name 68  "S"
-                              MemberName 68(S) 0  "ii"
-                              Name 70  "OutputStream"
-                              Decorate 25(VertexID) Location 0
-                              Decorate 37(OutputStream_clip0) BuiltIn ClipDistance
-                              Decorate 44(OutputStream_cull0) BuiltIn CullDistance
-                              Decorate 50(OutputStream_vpai) BuiltIn ViewportIndex
-                              Decorate 55(OutputStream_rtai) BuiltIn Layer
-                              Decorate 61(@entryPointOutput) Location 0
-                              Decorate 70(OutputStream) Location 1
+                              Name 20  "OutputStream_clip0"
+                              Name 21  "s"
+                              Name 29  "OutputStream_clip0"
+                              Name 34  "OutputStream_cull0"
+                              Name 40  "OutputStream_vpai"
+                              Name 45  "OutputStream_rtai"
+                              Name 49  "S"
+                              MemberName 49(S) 0  "ii"
+                              Name 51  "OutputStream"
+                              Name 58  "VertexID"
+                              Name 60  "VertexID"
+                              Name 62  "OutputStream"
+                              Name 63  "param"
+                              Name 65  "param"
+                              Decorate 20(OutputStream_clip0) BuiltIn Position
+                              Decorate 29(OutputStream_clip0) BuiltIn ClipDistance
+                              Decorate 34(OutputStream_cull0) BuiltIn CullDistance
+                              Decorate 40(OutputStream_vpai) BuiltIn ViewportIndex
+                              Decorate 45(OutputStream_rtai) BuiltIn Layer
+                              Decorate 51(OutputStream) Location 0
+                              Decorate 60(VertexID) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -209,75 +213,75 @@ output primitive = line_strip
                9:             TypePointer Function 8
               10:             TypeFloat 32
               11:             TypeInt 32 1
-           12(S):             TypeStruct 10(float) 10(float) 6(int) 6(int) 11(int)
+           12(S):             TypeStruct 10(float) 10(float) 10(float) 6(int) 6(int) 11(int)
               13:             TypePointer Function 12(S)
-              14:             TypeFunction 12(S) 9(ptr) 13(ptr)
-              24:             TypePointer Input 8
-    25(VertexID):     24(ptr) Variable Input
-              34:      6(int) Constant 1
-              35:             TypeArray 10(float) 34
-              36:             TypePointer Output 35
-37(OutputStream_clip0):     36(ptr) Variable Output
-              38:     11(int) Constant 0
-              39:             TypePointer Function 10(float)
-              42:             TypePointer Output 10(float)
-44(OutputStream_cull0):     36(ptr) Variable Output
-              45:     11(int) Constant 1
-              49:             TypePointer Output 6(int)
-50(OutputStream_vpai):     49(ptr) Variable Output
-              51:     11(int) Constant 2
-              52:             TypePointer Function 6(int)
-55(OutputStream_rtai):     49(ptr) Variable Output
-              56:     11(int) Constant 3
-           59(S):             TypeStruct 11(int)
-              60:             TypePointer Output 59(S)
-61(@entryPointOutput):     60(ptr) Variable Output
-              62:     11(int) Constant 4
-              63:             TypePointer Function 11(int)
-              66:             TypePointer Output 11(int)
-           68(S):             TypeStruct 11(int)
-              69:             TypePointer Output 68(S)
-70(OutputStream):     69(ptr) Variable Output
+              14:             TypeFunction 2 9(ptr) 13(ptr)
+              19:             TypePointer Output 10(float)
+20(OutputStream_clip0):     19(ptr) Variable Output
+              22:     11(int) Constant 0
+              23:             TypePointer Function 10(float)
+              26:      6(int) Constant 1
+              27:             TypeArray 10(float) 26
+              28:             TypePointer Output 27
+29(OutputStream_clip0):     28(ptr) Variable Output
+              30:     11(int) Constant 1
+34(OutputStream_cull0):     28(ptr) Variable Output
+              35:     11(int) Constant 2
+              39:             TypePointer Output 6(int)
+40(OutputStream_vpai):     39(ptr) Variable Output
+              41:     11(int) Constant 3
+              42:             TypePointer Function 6(int)
+45(OutputStream_rtai):     39(ptr) Variable Output
+              46:     11(int) Constant 4
+           49(S):             TypeStruct 11(int)
+              50:             TypePointer Output 49(S)
+51(OutputStream):     50(ptr) Variable Output
+              52:     11(int) Constant 5
+              53:             TypePointer Function 11(int)
+              56:             TypePointer Output 11(int)
+              59:             TypePointer Input 8
+    60(VertexID):     59(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-    23(VertexID):      9(ptr) Variable Function
- 27(flattenTemp):     13(ptr) Variable Function
-28(OutputStream):     13(ptr) Variable Function
-       29(param):      9(ptr) Variable Function
-       31(param):     13(ptr) Variable Function
-              26:           8 Load 25(VertexID)
-                              Store 23(VertexID) 26
-              30:           8 Load 23(VertexID)
-                              Store 29(param) 30
-              32:       12(S) FunctionCall 17(@main(u1[3];struct-S-f1-f1-u1-u1-i11;) 29(param) 31(param)
-              33:       12(S) Load 31(param)
-                              Store 28(OutputStream) 33
-                              Store 27(flattenTemp) 32
-              40:     39(ptr) AccessChain 27(flattenTemp) 38
-              41:   10(float) Load 40
-              43:     42(ptr) AccessChain 37(OutputStream_clip0) 38
-                              Store 43 41
-              46:     39(ptr) AccessChain 27(flattenTemp) 45
-              47:   10(float) Load 46
-              48:     42(ptr) AccessChain 44(OutputStream_cull0) 38
-                              Store 48 47
-              53:     52(ptr) AccessChain 27(flattenTemp) 51
-              54:      6(int) Load 53
-                              Store 50(OutputStream_vpai) 54
-              57:     52(ptr) AccessChain 27(flattenTemp) 56
-              58:      6(int) Load 57
-                              Store 55(OutputStream_rtai) 58
-              64:     63(ptr) AccessChain 27(flattenTemp) 62
-              65:     11(int) Load 64
-              67:     66(ptr) AccessChain 61(@entryPointOutput) 38
-                              Store 67 65
+    58(VertexID):      9(ptr) Variable Function
+62(OutputStream):     13(ptr) Variable Function
+       63(param):      9(ptr) Variable Function
+       65(param):     13(ptr) Variable Function
+              61:           8 Load 60(VertexID)
+                              Store 58(VertexID) 61
+              64:           8 Load 58(VertexID)
+                              Store 63(param) 64
+              66:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 63(param) 65(param)
+              67:       12(S) Load 65(param)
+                              Store 62(OutputStream) 67
                               Return
                               FunctionEnd
-17(@main(u1[3];struct-S-f1-f1-u1-u1-i11;):       12(S) Function None 14
+17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 14
     15(VertexID):      9(ptr) FunctionParameter
 16(OutputStream):     13(ptr) FunctionParameter
               18:             Label
-           19(s):     13(ptr) Variable Function
-              20:       12(S) Load 19(s)
-                              ReturnValue 20
+           21(s):     13(ptr) Variable Function
+              24:     23(ptr) AccessChain 21(s) 22
+              25:   10(float) Load 24
+                              Store 20(OutputStream_clip0) 25
+              31:     23(ptr) AccessChain 21(s) 30
+              32:   10(float) Load 31
+              33:     19(ptr) AccessChain 29(OutputStream_clip0) 22
+                              Store 33 32
+              36:     23(ptr) AccessChain 21(s) 35
+              37:   10(float) Load 36
+              38:     19(ptr) AccessChain 34(OutputStream_cull0) 22
+                              Store 38 37
+              43:     42(ptr) AccessChain 21(s) 41
+              44:      6(int) Load 43
+                              Store 40(OutputStream_vpai) 44
+              47:     42(ptr) AccessChain 21(s) 46
+              48:      6(int) Load 47
+                              Store 45(OutputStream_rtai) 48
+              54:     53(ptr) AccessChain 21(s) 52
+              55:     11(int) Load 54
+              57:     56(ptr) AccessChain 51(OutputStream) 22
+                              Store 57 55
+                              EmitVertex
+                              Return
                               FunctionEnd
diff --git a/Test/hlsl.semantic.geom b/Test/hlsl.semantic.geom
index c4d7abad7e7f70719258635e4c74d70e0c99dad2..fc6a53ab4caa0deffe3aa40ca99cb26a1d865e49 100644
--- a/Test/hlsl.semantic.geom
+++ b/Test/hlsl.semantic.geom
@@ -1,4 +1,5 @@
 struct S {
+    float clip0 : SV_Position;
     float clip0 : SV_ClipDistance0;
     float cull0 : SV_CullDistance0;
     uint vpai   : SV_ViewportArrayIndex;
@@ -7,9 +8,9 @@ struct S {
 };
 
 [maxvertexcount(4)]
-S main(triangle in uint VertexID[3] : VertexID,
+void main(triangle in uint VertexID[3] : VertexID,
        inout LineStream<S> OutputStream)
 {
     S s;
-    return s;
+    OutputStream.Append(s);
 }