HLSL: Remove support for named tbuffer/cbuffer.  Fixes #939.
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 6ef44e4..c0d251c 100755
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -2,41 +2,49 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:30  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30  Function Definition: foo( ( temp float)
 0:30    Function Parameters: 
-0:30      'input' ( in 4-component vector of float)
 0:?     Sequence
 0:31      Branch: Return with expression
-0:31        add ( temp 4-component vector of float)
-0:31          add ( temp 4-component vector of float)
-0:31            add ( temp 4-component vector of float)
-0:31              add ( temp 4-component vector of float)
-0:31                'input' ( in 4-component vector of float)
-0:31                v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31                  'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31                  Constant:
-0:31                    0 (const uint)
-0:31              v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31                'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31                Constant:
-0:31                  0 (const uint)
-0:31            v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:31              'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:31              Constant:
-0:31                0 (const uint)
-0:31          v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31            'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:31            Constant:
-0:31              0 (const uint)
-0:30  Function Definition: PixelShaderFunction( ( temp void)
-0:30    Function Parameters: 
+0:31        Constant:
+0:31          1.000000
+0:35  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35    Function Parameters: 
+0:35      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:30      move second child to first child ( temp 4-component vector of float)
+0:36      Branch: Return with expression
+0:36        vector-scale ( temp 4-component vector of float)
+0:36          add ( temp 4-component vector of float)
+0:36            add ( temp 4-component vector of float)
+0:36              add ( temp 4-component vector of float)
+0:36                add ( temp 4-component vector of float)
+0:36                  'input' ( in 4-component vector of float)
+0:36                  v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36                    'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36                    Constant:
+0:36                      0 (const uint)
+0:36                v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:36                  'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36              v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:36                'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36            v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:36              'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:36              Constant:
+0:36                0 (const uint)
+0:36          Function Call: foo( ( temp float)
+0:35  Function Definition: PixelShaderFunction( ( temp void)
+0:35    Function Parameters: 
+0:?     Sequence
+0:35      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' ( in 4-component vector of float FragCoord)
-0:30      move second child to first child ( temp 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
@@ -53,41 +61,49 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:30  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:30  Function Definition: foo( ( temp float)
 0:30    Function Parameters: 
-0:30      'input' ( in 4-component vector of float)
 0:?     Sequence
 0:31      Branch: Return with expression
-0:31        add ( temp 4-component vector of float)
-0:31          add ( temp 4-component vector of float)
-0:31            add ( temp 4-component vector of float)
-0:31              add ( temp 4-component vector of float)
-0:31                'input' ( in 4-component vector of float)
-0:31                v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
-0:31                  'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
-0:31                  Constant:
-0:31                    0 (const uint)
-0:31              v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
-0:31                'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
-0:31                Constant:
-0:31                  0 (const uint)
-0:31            v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
-0:31              'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
-0:31              Constant:
-0:31                0 (const uint)
-0:31          v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
-0:31            'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
-0:31            Constant:
-0:31              0 (const uint)
-0:30  Function Definition: PixelShaderFunction( ( temp void)
-0:30    Function Parameters: 
+0:31        Constant:
+0:31          1.000000
+0:35  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35    Function Parameters: 
+0:35      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:30      move second child to first child ( temp 4-component vector of float)
+0:36      Branch: Return with expression
+0:36        vector-scale ( temp 4-component vector of float)
+0:36          add ( temp 4-component vector of float)
+0:36            add ( temp 4-component vector of float)
+0:36              add ( temp 4-component vector of float)
+0:36                add ( temp 4-component vector of float)
+0:36                  'input' ( in 4-component vector of float)
+0:36                  v1: direct index for structure (layout( row_major std140) uniform 4-component vector of float)
+0:36                    'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
+0:36                    Constant:
+0:36                      0 (const uint)
+0:36                v2: direct index for structure (layout( row_major std430) buffer 4-component vector of float)
+0:36                  'anon@1' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer 4-component vector of float v2})
+0:36                  Constant:
+0:36                    0 (const uint)
+0:36              v3: direct index for structure (layout( row_major std140 offset=0) uniform 4-component vector of float)
+0:36                'anon@2' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 4-component vector of float v3, layout( row_major std140 offset=20) uniform int i3})
+0:36                Constant:
+0:36                  0 (const uint)
+0:36            v4: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
+0:36              'anon@3' (layout( binding=8 row_major std430) readonly buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v4, layout( row_major std430 offset=48) buffer int i4, layout( row_major std430 offset=60) buffer float f1, layout( row_major std430 offset=64) buffer float f3, layout( row_major std430 offset=68) buffer float f4, layout( row_major std430 offset=72) buffer float f5, layout( row_major std430) buffer float f6, layout( row_major std430 offset=128) buffer float f7, layout( row_major std430 offset=112) buffer 3X4 matrix of float m1, layout( column_major std430 offset=176) buffer 3X4 matrix of float m2, layout( row_major std430 offset=240) buffer 3X4 matrix of float m3, layout( row_major std430 offset=304) buffer 3X4 matrix of float m4})
+0:36              Constant:
+0:36                0 (const uint)
+0:36          Function Call: foo( ( temp float)
+0:35  Function Definition: PixelShaderFunction( ( temp void)
+0:35    Function Parameters: 
+0:?     Sequence
+0:35      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' ( in 4-component vector of float FragCoord)
-0:30      move second child to first child ( temp 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:30        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:35        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform 4-component vector of float v1})
@@ -99,146 +115,155 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 53
+// Id's are bound by 61
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 46 49
+                              EntryPoint Fragment 4  "PixelShaderFunction" 54 57
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(vf4;"
-                              Name 10  "input"
-                              Name 14  "buf1"
-                              MemberName 14(buf1) 0  "v1"
-                              Name 16  ""
-                              Name 23  "buf2"
-                              MemberName 23(buf2) 0  "v2"
-                              Name 25  ""
-                              Name 29  "cbufName"
-                              MemberName 29(cbufName) 0  "v3"
-                              MemberName 29(cbufName) 1  "i3"
+                              Name 8  "foo("
+                              Name 14  "@PixelShaderFunction(vf4;"
+                              Name 13  "input"
+                              Name 20  "buf1"
+                              MemberName 20(buf1) 0  "v1"
+                              Name 22  ""
+                              Name 29  "buf2"
+                              MemberName 29(buf2) 0  "v2"
                               Name 31  ""
-                              Name 36  "tbufName"
-                              MemberName 36(tbufName) 0  "v4"
-                              MemberName 36(tbufName) 1  "i4"
-                              MemberName 36(tbufName) 2  "f1"
-                              MemberName 36(tbufName) 3  "f3"
-                              MemberName 36(tbufName) 4  "f4"
-                              MemberName 36(tbufName) 5  "f5"
-                              MemberName 36(tbufName) 6  "f6"
-                              MemberName 36(tbufName) 7  "f7"
-                              MemberName 36(tbufName) 8  "m1"
-                              MemberName 36(tbufName) 9  "m2"
-                              MemberName 36(tbufName) 10  "m3"
-                              MemberName 36(tbufName) 11  "m4"
-                              Name 38  ""
-                              Name 44  "input"
-                              Name 46  "input"
-                              Name 49  "@entryPointOutput"
-                              Name 50  "param"
-                              MemberDecorate 14(buf1) 0 Offset 0
-                              Decorate 14(buf1) Block
-                              Decorate 16 DescriptorSet 0
-                              MemberDecorate 23(buf2) 0 NonWritable
-                              MemberDecorate 23(buf2) 0 Offset 0
-                              Decorate 23(buf2) BufferBlock
-                              Decorate 25 DescriptorSet 0
-                              MemberDecorate 29(cbufName) 0 Offset 0
-                              MemberDecorate 29(cbufName) 1 Offset 20
-                              Decorate 29(cbufName) Block
+                              Name 35  "cbufName"
+                              MemberName 35(cbufName) 0  "v3"
+                              MemberName 35(cbufName) 1  "i3"
+                              Name 37  ""
+                              Name 42  "tbufName"
+                              MemberName 42(tbufName) 0  "v4"
+                              MemberName 42(tbufName) 1  "i4"
+                              MemberName 42(tbufName) 2  "f1"
+                              MemberName 42(tbufName) 3  "f3"
+                              MemberName 42(tbufName) 4  "f4"
+                              MemberName 42(tbufName) 5  "f5"
+                              MemberName 42(tbufName) 6  "f6"
+                              MemberName 42(tbufName) 7  "f7"
+                              MemberName 42(tbufName) 8  "m1"
+                              MemberName 42(tbufName) 9  "m2"
+                              MemberName 42(tbufName) 10  "m3"
+                              MemberName 42(tbufName) 11  "m4"
+                              Name 44  ""
+                              Name 52  "input"
+                              Name 54  "input"
+                              Name 57  "@entryPointOutput"
+                              Name 58  "param"
+                              MemberDecorate 20(buf1) 0 Offset 0
+                              Decorate 20(buf1) Block
+                              Decorate 22 DescriptorSet 0
+                              MemberDecorate 29(buf2) 0 NonWritable
+                              MemberDecorate 29(buf2) 0 Offset 0
+                              Decorate 29(buf2) BufferBlock
                               Decorate 31 DescriptorSet 0
-                              MemberDecorate 36(tbufName) 0 NonWritable
-                              MemberDecorate 36(tbufName) 0 Offset 16
-                              MemberDecorate 36(tbufName) 1 NonWritable
-                              MemberDecorate 36(tbufName) 1 Offset 48
-                              MemberDecorate 36(tbufName) 2 NonWritable
-                              MemberDecorate 36(tbufName) 2 Offset 60
-                              MemberDecorate 36(tbufName) 3 NonWritable
-                              MemberDecorate 36(tbufName) 3 Offset 64
-                              MemberDecorate 36(tbufName) 4 NonWritable
-                              MemberDecorate 36(tbufName) 4 Offset 68
-                              MemberDecorate 36(tbufName) 5 NonWritable
-                              MemberDecorate 36(tbufName) 5 Offset 72
-                              MemberDecorate 36(tbufName) 6 NonWritable
-                              MemberDecorate 36(tbufName) 6 Offset 76
-                              MemberDecorate 36(tbufName) 7 NonWritable
-                              MemberDecorate 36(tbufName) 7 Offset 128
-                              MemberDecorate 36(tbufName) 8 RowMajor
-                              MemberDecorate 36(tbufName) 8 NonWritable
-                              MemberDecorate 36(tbufName) 8 Offset 112
-                              MemberDecorate 36(tbufName) 8 MatrixStride 16
-                              MemberDecorate 36(tbufName) 9 ColMajor
-                              MemberDecorate 36(tbufName) 9 NonWritable
-                              MemberDecorate 36(tbufName) 9 Offset 176
-                              MemberDecorate 36(tbufName) 9 MatrixStride 16
-                              MemberDecorate 36(tbufName) 10 RowMajor
-                              MemberDecorate 36(tbufName) 10 NonWritable
-                              MemberDecorate 36(tbufName) 10 Offset 240
-                              MemberDecorate 36(tbufName) 10 MatrixStride 16
-                              MemberDecorate 36(tbufName) 11 RowMajor
-                              MemberDecorate 36(tbufName) 11 NonWritable
-                              MemberDecorate 36(tbufName) 11 Offset 304
-                              MemberDecorate 36(tbufName) 11 MatrixStride 16
-                              Decorate 36(tbufName) BufferBlock
-                              Decorate 38 DescriptorSet 0
-                              Decorate 38 Binding 8
-                              Decorate 46(input) BuiltIn FragCoord
-                              Decorate 49(@entryPointOutput) Location 0
+                              MemberDecorate 35(cbufName) 0 Offset 0
+                              MemberDecorate 35(cbufName) 1 Offset 20
+                              Decorate 35(cbufName) Block
+                              Decorate 37 DescriptorSet 0
+                              MemberDecorate 42(tbufName) 0 NonWritable
+                              MemberDecorate 42(tbufName) 0 Offset 16
+                              MemberDecorate 42(tbufName) 1 NonWritable
+                              MemberDecorate 42(tbufName) 1 Offset 48
+                              MemberDecorate 42(tbufName) 2 NonWritable
+                              MemberDecorate 42(tbufName) 2 Offset 60
+                              MemberDecorate 42(tbufName) 3 NonWritable
+                              MemberDecorate 42(tbufName) 3 Offset 64
+                              MemberDecorate 42(tbufName) 4 NonWritable
+                              MemberDecorate 42(tbufName) 4 Offset 68
+                              MemberDecorate 42(tbufName) 5 NonWritable
+                              MemberDecorate 42(tbufName) 5 Offset 72
+                              MemberDecorate 42(tbufName) 6 NonWritable
+                              MemberDecorate 42(tbufName) 6 Offset 76
+                              MemberDecorate 42(tbufName) 7 NonWritable
+                              MemberDecorate 42(tbufName) 7 Offset 128
+                              MemberDecorate 42(tbufName) 8 RowMajor
+                              MemberDecorate 42(tbufName) 8 NonWritable
+                              MemberDecorate 42(tbufName) 8 Offset 112
+                              MemberDecorate 42(tbufName) 8 MatrixStride 16
+                              MemberDecorate 42(tbufName) 9 ColMajor
+                              MemberDecorate 42(tbufName) 9 NonWritable
+                              MemberDecorate 42(tbufName) 9 Offset 176
+                              MemberDecorate 42(tbufName) 9 MatrixStride 16
+                              MemberDecorate 42(tbufName) 10 RowMajor
+                              MemberDecorate 42(tbufName) 10 NonWritable
+                              MemberDecorate 42(tbufName) 10 Offset 240
+                              MemberDecorate 42(tbufName) 10 MatrixStride 16
+                              MemberDecorate 42(tbufName) 11 RowMajor
+                              MemberDecorate 42(tbufName) 11 NonWritable
+                              MemberDecorate 42(tbufName) 11 Offset 304
+                              MemberDecorate 42(tbufName) 11 MatrixStride 16
+                              Decorate 42(tbufName) BufferBlock
+                              Decorate 44 DescriptorSet 0
+                              Decorate 44 Binding 8
+                              Decorate 54(input) BuiltIn FragCoord
+                              Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-               9:             TypeFunction 7(fvec4) 8(ptr)
-        14(buf1):             TypeStruct 7(fvec4)
-              15:             TypePointer Uniform 14(buf1)
-              16:     15(ptr) Variable Uniform
-              17:             TypeInt 32 1
-              18:     17(int) Constant 0
-              19:             TypePointer Uniform 7(fvec4)
-        23(buf2):             TypeStruct 7(fvec4)
-              24:             TypePointer Uniform 23(buf2)
-              25:     24(ptr) Variable Uniform
-    29(cbufName):             TypeStruct 7(fvec4) 17(int)
-              30:             TypePointer Uniform 29(cbufName)
+               7:             TypeFunction 6(float)
+              10:             TypeVector 6(float) 4
+              11:             TypePointer Function 10(fvec4)
+              12:             TypeFunction 10(fvec4) 11(ptr)
+              16:    6(float) Constant 1065353216
+        20(buf1):             TypeStruct 10(fvec4)
+              21:             TypePointer Uniform 20(buf1)
+              22:     21(ptr) Variable Uniform
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+              25:             TypePointer Uniform 10(fvec4)
+        29(buf2):             TypeStruct 10(fvec4)
+              30:             TypePointer Uniform 29(buf2)
               31:     30(ptr) Variable Uniform
-              35:             TypeMatrix 7(fvec4) 3
-    36(tbufName):             TypeStruct 7(fvec4) 17(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 35 35 35 35
-              37:             TypePointer Uniform 36(tbufName)
-              38:     37(ptr) Variable Uniform
-              45:             TypePointer Input 7(fvec4)
-       46(input):     45(ptr) Variable Input
-              48:             TypePointer Output 7(fvec4)
-49(@entryPointOutput):     48(ptr) Variable Output
+    35(cbufName):             TypeStruct 10(fvec4) 23(int)
+              36:             TypePointer Uniform 35(cbufName)
+              37:     36(ptr) Variable Uniform
+              41:             TypeMatrix 10(fvec4) 3
+    42(tbufName):             TypeStruct 10(fvec4) 23(int) 6(float) 6(float) 6(float) 6(float) 6(float) 6(float) 41 41 41 41
+              43:             TypePointer Uniform 42(tbufName)
+              44:     43(ptr) Variable Uniform
+              53:             TypePointer Input 10(fvec4)
+       54(input):     53(ptr) Variable Input
+              56:             TypePointer Output 10(fvec4)
+57(@entryPointOutput):     56(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       44(input):      8(ptr) Variable Function
-       50(param):      8(ptr) Variable Function
-              47:    7(fvec4) Load 46(input)
-                              Store 44(input) 47
-              51:    7(fvec4) Load 44(input)
-                              Store 50(param) 51
-              52:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 50(param)
-                              Store 49(@entryPointOutput) 52
+       52(input):     11(ptr) Variable Function
+       58(param):     11(ptr) Variable Function
+              55:   10(fvec4) Load 54(input)
+                              Store 52(input) 55
+              59:   10(fvec4) Load 52(input)
+                              Store 58(param) 59
+              60:   10(fvec4) FunctionCall 14(@PixelShaderFunction(vf4;) 58(param)
+                              Store 57(@entryPointOutput) 60
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
-       10(input):      8(ptr) FunctionParameter
-              12:             Label
-              13:    7(fvec4) Load 10(input)
-              20:     19(ptr) AccessChain 16 18
-              21:    7(fvec4) Load 20
-              22:    7(fvec4) FAdd 13 21
-              26:     19(ptr) AccessChain 25 18
-              27:    7(fvec4) Load 26
-              28:    7(fvec4) FAdd 22 27
-              32:     19(ptr) AccessChain 31 18
-              33:    7(fvec4) Load 32
-              34:    7(fvec4) FAdd 28 33
-              39:     19(ptr) AccessChain 38 18
-              40:    7(fvec4) Load 39
-              41:    7(fvec4) FAdd 34 40
-                              ReturnValue 41
+         8(foo():    6(float) Function None 7
+               9:             Label
+                              ReturnValue 16
+                              FunctionEnd
+14(@PixelShaderFunction(vf4;):   10(fvec4) Function None 12
+       13(input):     11(ptr) FunctionParameter
+              15:             Label
+              19:   10(fvec4) Load 13(input)
+              26:     25(ptr) AccessChain 22 24
+              27:   10(fvec4) Load 26
+              28:   10(fvec4) FAdd 19 27
+              32:     25(ptr) AccessChain 31 24
+              33:   10(fvec4) Load 32
+              34:   10(fvec4) FAdd 28 33
+              38:     25(ptr) AccessChain 37 24
+              39:   10(fvec4) Load 38
+              40:   10(fvec4) FAdd 34 39
+              45:     25(ptr) AccessChain 44 24
+              46:   10(fvec4) Load 45
+              47:   10(fvec4) FAdd 40 46
+              48:    6(float) FunctionCall 8(foo()
+              49:   10(fvec4) VectorTimesScalar 47 48
+                              ReturnValue 49
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index 8ecfde6..5f7a033 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -2,26 +2,19 @@
 Uniform reflection:
 anonMember3: offset 80, type 8b52, size 1, index 0, binding -1
 s.a: offset 0, type 1404, size 1, index 1, binding -1
-ablock.scalar: offset 12, type 1404, size 1, index 2, binding -1
 m23: offset 16, type 8b67, size 1, index 0, binding -1
 scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1
-c_m23: offset 16, type 8b67, size 1, index 3, binding -1
-c_scalarAfterm23: offset 48, type 1404, size 1, index 3, binding -1
+c_m23: offset 16, type 8b67, size 1, index 2, binding -1
+c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1
 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1
 floatArray: offset 112, type 1406, size 5, index 0, binding -1
 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1
-ablock.memfloat2: offset 48, type 8b50, size 1, index 2, binding -1
-ablock.memf1: offset 56, type 1406, size 1, index 2, binding -1
-ablock.memf2: offset 60, type 8b56, size 1, index 2, binding -1
-ablock.memf3: offset 64, type 1404, size 1, index 2, binding -1
-ablock.memfloat2a: offset 72, type 8b50, size 1, index 2, binding -1
-ablock.m22: offset 80, type 8b5a, size 7, index 2, binding -1
+m22: offset 208, type 8b5a, size 9, index 0, binding -1
 dm22: offset 32, type 8b5a, size 4, index 1, binding -1
-m22: offset 208, type 8b5a, size 3, index 0, binding -1
-nest.foo.n1.a: offset 0, type 1406, size 1, index 4, binding -1
-nest.foo.n2.b: offset 16, type 1406, size 1, index 4, binding -1
-nest.foo.n2.c: offset 20, type 1406, size 1, index 4, binding -1
-nest.foo.n2.d: offset 24, type 1406, size 1, index 4, binding -1
+foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1
+foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1
+foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1
+foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1
 deepA.d2.d1[2].va: offset 376, type 8b50, size 2, index 1, binding -1
 deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1
 deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1
@@ -61,19 +54,18 @@
 deepD[1].d2.d1[3].va: offset 2480, type 8b50, size 3, index 1, binding -1
 deepD[1].d2.d1[3].b: offset 2480, type 8b56, size 1, index 1, binding -1
 deepD[1].v3: offset 2480, type 8b54, size 1, index 1, binding -1
-arrBl.foo: offset 0, type 1406, size 1, index 5, binding -1
-arrBl2.foo: offset 0, type 1406, size 1, index 6, binding -1
+foo1: offset 0, type 1406, size 1, index 4, binding -1
+foo2: offset 0, type 1406, size 1, index 5, binding -1
 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1
 uf1: offset 16, type 1406, size 1, index 1, binding -1
 
 Uniform block reflection:
 nameless: offset -1, type ffffffff, size 496, index -1, binding -1
 $Global: offset -1, type ffffffff, size 3088, index -1, binding -1
-ablock: offset -1, type ffffffff, size 304, index -1, binding -1
 c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1
-nest: offset -1, type ffffffff, size 32, index -1, binding -1
-arrBl: offset -1, type ffffffff, size 4, index -1, binding -1
-arrBl2: offset -1, type ffffffff, size 4, index -1, binding -1
+nested: offset -1, type ffffffff, size 32, index -1, binding -1
+abl: offset -1, type ffffffff, size 4, index -1, binding -1
+abl2: offset -1, type ffffffff, size 4, index -1, binding -1
 
 Vertex attribute reflection:
 attributeFloat: offset 0, type 1406, size 0, index 0, binding -1
diff --git a/Test/hlsl.buffer.frag b/Test/hlsl.buffer.frag
index 1c112cf..520de09 100644
--- a/Test/hlsl.buffer.frag
+++ b/Test/hlsl.buffer.frag
@@ -1,15 +1,15 @@
 cbuffer buf1 {
     float4 v1;
-};
+}; // extraneous ;
 
 tbuffer buf2 {
     float4 v2;
-};
+}; // extraneous ;
 
 cbuffer cbufName {
     float4 v3 : packoffset(c0);
     int i3    : packoffset(c1.y);
-} // no semicolon is okay
+}
 
 tbuffer tbufName : register(t8) {
     float4 v4 : packoffset(c1);
@@ -24,9 +24,14 @@
        row_major float3x4 m2 : packoffset(c11);
     column_major float3x4 m3 : packoffset(c15);
                  float3x4 m4 : packoffset(c19);
-}  // no semicolon is okay
+}
+
+float foo() // float looks like identifier, but can't be part of tbuffer
+{
+    return 1.0;
+}
 
 float4 PixelShaderFunction(float4 input : SV_POSITION) : SV_TARGET0
 {
-    return input + v1 + v2 + v3 + v4;
+    return (input + v1 + v2 + v3 + v4) * foo();
 }
diff --git a/Test/hlsl.reflection.vert b/Test/hlsl.reflection.vert
index 21cc810..06207c7 100644
--- a/Test/hlsl.reflection.vert
+++ b/Test/hlsl.reflection.vert
@@ -19,27 +19,10 @@
     float4 c_anonMember3;

 };

 

-cbuffer named {

-    float3 deadMember1;

-    int scalar;

-    float4 member2;

-    float4 member3;

-    float2 memfloat2;

-    float memf1;

-    bool  memf2;

-    int   memf3;

-    float2 memfloat2a;

-    float2x2 m22[7];

-} ablock;

-

 cbuffer namelessdead {

     int a;

 };

 

-cbuffer namedDead {

-    int b;

-} bblock;

-

 struct N1 {

     float a;

 };

@@ -57,7 +40,7 @@
 

 cbuffer nested {

     N3 foo;

-} nest;

+}

 

 struct TS {

     int a;

@@ -89,16 +72,12 @@
     int3 v3;

 };

 

-

-

-

 uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];

 

 const bool control = true;

 

 void deadFunction()

 {

-    float3 v3 = ablock.deadMember1;

     float4 v = anonDeadMember2;

     float f = ufDead4;

 }

@@ -110,12 +89,12 @@
 }

 

 tbuffer abl {

-    float foo;

-} arrBl;

+    float foo1;

+}

 

 tbuffer abl2 {

-    float foo;

-} arrBl2;

+    float foo2;

+}

 

 void flizv(in float attributeFloat, in float2 attributeFloat2, in float3 attributeFloat3, in float4 attributeFloat4, in float4x4 attributeMat4)

 {

@@ -130,22 +109,16 @@
         liveFunction2();

         f = anonMember3.z;

         f = s.a;

-        f = ablock.scalar;

         f = m23[1].y + scalarAfterm23;

         f = c_m23[1].y + c_scalarAfterm23;

         f += scalarBeforeArray;

         f += floatArray[2];

         f += floatArray[4];

         f += scalarAfterArray;

-        f += ablock.memfloat2.x;

-        f += ablock.memf1;

-        f += float(ablock.memf2);

-        f += ablock.memf3;

-        f += ablock.memfloat2a.y;

-        f += ablock.m22[i][1][0];

+        f += m22[i][1][0];

         f += dm22[3][0][1];

         f += m22[2][1].y;

-        f += nest.foo.n1.a + nest.foo.n2.b + nest.foo.n2.c + nest.foo.n2.d;

+        f += foo.n1.a + foo.n2.b + foo.n2.c + foo.n2.d;

         f += deepA[i].d2.d1[2].va[1].x;

         f += deepB[1].d2.d1[i].va[1].x;

         f += deepB[i].d2.d1[i].va[1].x;

@@ -154,8 +127,8 @@
     } else

         f = ufDead3;

 

-    f += arrBl.foo + arrBl.foo;

-    f += arrBl2.foo;

+    f += foo1 + foo2;

+    f += foo2;

 

     f += attributeFloat;

     f += attributeFloat2.x;

diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index fd590f8..d8675f2 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -371,10 +371,16 @@
     // if (acceptSamplerDeclarationDX9(declaredType))
     //     return true;
 
+    bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
     // fully_specified_type
     if (! acceptFullySpecifiedType(declaredType, nodeList))
         return false;
 
+    // cbuffer and tbuffer end with the closing '}'.
+    // No semicolon is included.
+    if (forbidDeclarators)
+        return true;
+
     // declarator_list
     //    : declarator
     //         : identifier
@@ -489,7 +495,7 @@
         // COMMA
         if (acceptTokenClass(EHTokComma))
             declarator_list = true;
-        }
+    }
 
     // The top-level initializer node is a sequence.
     if (initializers != nullptr)
@@ -501,18 +507,15 @@
     else
         nodeList = initializers;
 
-    // SEMICOLON(optional for cbuffer/tbuffer)
+    // SEMICOLON
     if (! acceptTokenClass(EHTokSemicolon)) {
+        // This may have been a false detection of what appeared to be a declaration, but
+        // was actually an assignment such as "float = 4", where "float" is an identifier.
+        // We put the token back to let further parsing happen for cases where that may
+        // happen.  This errors on the side of caution, and mostly triggers the error.
         if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma) {
-            // This may have been a false detection of what appeared to be a declaration, but
-            // was actually an assignment such as "float = 4", where "float" is an identifier.
-            // We put the token back to let further parsing happen for cases where that may
-            // happen.  This errors on the side of caution, and mostly triggers the error.
             recedeToken();
             return false;
-        } else if (declaredType.getBasicType() == EbtBlock) {
-            // cbuffer, et. al. (but not struct) don't have an ending semicolon
-            return true;
         } else {
             expected(";");
             return false;
@@ -1904,10 +1907,10 @@
     bool readonly = false;
 
     if (acceptTokenClass(EHTokCBuffer)) {
-    // CBUFFER
+        // CBUFFER
         storageQualifier = EvqUniform;
     } else if (acceptTokenClass(EHTokTBuffer)) {
-    // TBUFFER
+        // TBUFFER
         storageQualifier = EvqBuffer;
         readonly = true;
     } else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct)) {