Merge pull request #1090 from tafuri/#1084-fix-segfault

Only track variables in the global scope
This commit is contained in:
John Kessenich 2017-10-07 07:19:21 +03:00 committed by GitHub
commit b27de0289c
4 changed files with 72 additions and 2 deletions

View File

@ -0,0 +1,64 @@
hlsl.localStructuredBuffer.comp
Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:2 Function Definition: @main( ( temp void)
0:2 Function Parameters:
0:2 Function Definition: main( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 Function Call: @main( ( temp void)
0:? Linker Objects
0:? 'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
Linked compute stage:
Shader version: 500
local_size = (1, 1, 1)
0:? Sequence
0:2 Function Definition: @main( ( temp void)
0:2 Function Parameters:
0:2 Function Definition: main( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 Function Call: @main( ( temp void)
0:? Linker Objects
0:? 'srt0' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 14
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 1 1 1
Source HLSL 500
Name 4 "main"
Name 6 "@main("
Name 11 "srt0"
MemberName 11(srt0) 0 "@data"
Name 13 "srt0"
Decorate 10 ArrayStride 4
MemberDecorate 11(srt0) 0 Offset 0
Decorate 11(srt0) BufferBlock
Decorate 13(srt0) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
9: TypeInt 32 0
10: TypeRuntimeArray 9(int)
11(srt0): TypeStruct 10
12: TypePointer Uniform 11(srt0)
13(srt0): 12(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
8: 2 FunctionCall 6(@main()
Return
FunctionEnd
6(@main(): 2 Function None 3
7: Label
Return
FunctionEnd

View File

@ -0,0 +1,4 @@
RWStructuredBuffer<uint> srt0;
void main() {
RWStructuredBuffer<uint> srt0Local = srt0;
}

View File

@ -219,6 +219,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.load.rwtexture.array.dx10.frag", "main"},
{"hlsl.load.offset.dx10.frag", "main"},
{"hlsl.load.offsetarray.dx10.frag", "main"},
{"hlsl.localStructuredBuffer.comp", "main"},
{"hlsl.logical.binary.frag", "main"},
{"hlsl.logical.binary.vec.frag", "main"},
{"hlsl.logicalConvert.frag", "main"},

View File

@ -8318,8 +8318,9 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
return;
}
// Save it in the AST for linker use.
trackLinkage(variable);
// Save it in the AST for linker use.
if (symbolTable.atGlobalLevel())
trackLinkage(variable);
}
//