Skip to content

Commit 7881226

Browse files
authored
Only set afterType when a token is recognized as a keyword (#4142)
* add test for using 'vector' without long_vector * Only set afterType when a token is recognized as a keyword
1 parent b937eae commit 7881226

File tree

4 files changed

+114
-49
lines changed

4 files changed

+114
-49
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
spv.longVectorNotReserved.comp
2+
// Module Version 10300
3+
// Generated by (magic number): 8000b
4+
// Id's are bound by 19
5+
6+
Capability Shader
7+
1: ExtInstImport "GLSL.std.450"
8+
MemoryModel Logical GLSL450
9+
EntryPoint GLCompute 4 "main"
10+
ExecutionMode 4 LocalSize 64 1 1
11+
Source GLSL 450
12+
Name 4 "main"
13+
Name 8 "f"
14+
Name 11 "vector"
15+
Decorate 18 BuiltIn WorkgroupSize
16+
2: TypeVoid
17+
3: TypeFunction 2
18+
6: TypeFloat 32
19+
7: TypePointer Function 6(float)
20+
9: TypeVector 6(float) 4
21+
10: TypePointer Function 9(fvec4)
22+
12: TypeInt 32 0
23+
13: 12(int) Constant 1
24+
16: TypeVector 12(int) 3
25+
17: 12(int) Constant 64
26+
18: 16(ivec3) ConstantComposite 17 13 13
27+
4(main): 2 Function None 3
28+
5: Label
29+
8(f): 7(ptr) Variable Function
30+
11(vector): 10(ptr) Variable Function
31+
14: 7(ptr) AccessChain 11(vector) 13
32+
15: 6(float) Load 14
33+
Store 8(f) 15
34+
Return
35+
FunctionEnd
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#version 450 core
2+
3+
layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
4+
5+
void main()
6+
{
7+
vec4 vector;
8+
float f = vector.y;
9+
}

glslang/MachineIndependent/Scan.cpp

Lines changed: 69 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,13 +1354,14 @@ int TScanContext::tokenizeIdentifier()
13541354
case U64VEC2:
13551355
case U64VEC3:
13561356
case U64VEC4:
1357-
afterType = true;
13581357
if (parseContext.symbolTable.atBuiltInLevel() ||
13591358
parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
13601359
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
13611360
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1362-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))
1361+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64)) {
1362+
afterType = true;
13631363
return keyword;
1364+
}
13641365
return identifierOrType();
13651366

13661367
case INT8_T:
@@ -1371,13 +1372,14 @@ int TScanContext::tokenizeIdentifier()
13711372
case U8VEC2:
13721373
case U8VEC3:
13731374
case U8VEC4:
1374-
afterType = true;
13751375
if (parseContext.symbolTable.atBuiltInLevel() ||
13761376
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
13771377
parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
13781378
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1379-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8))
1379+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) {
1380+
afterType = true;
13801381
return keyword;
1382+
}
13811383
return identifierOrType();
13821384

13831385
case INT16_T:
@@ -1388,14 +1390,15 @@ int TScanContext::tokenizeIdentifier()
13881390
case U16VEC2:
13891391
case U16VEC3:
13901392
case U16VEC4:
1391-
afterType = true;
13921393
if (parseContext.symbolTable.atBuiltInLevel() ||
13931394
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
13941395
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
13951396
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
13961397
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1397-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))
1398+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16)) {
1399+
afterType = true;
13981400
return keyword;
1401+
}
13991402
return identifierOrType();
14001403
case INT32_T:
14011404
case UINT32_T:
@@ -1405,23 +1408,25 @@ int TScanContext::tokenizeIdentifier()
14051408
case U32VEC2:
14061409
case U32VEC3:
14071410
case U32VEC4:
1408-
afterType = true;
14091411
if (parseContext.symbolTable.atBuiltInLevel() ||
14101412
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
14111413
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1412-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32))
1414+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) {
1415+
afterType = true;
14131416
return keyword;
1417+
}
14141418
return identifierOrType();
14151419
case FLOAT32_T:
14161420
case F32VEC2:
14171421
case F32VEC3:
14181422
case F32VEC4:
1419-
afterType = true;
14201423
if (parseContext.symbolTable.atBuiltInLevel() ||
14211424
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
14221425
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1423-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32))
1426+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
1427+
afterType = true;
14241428
return keyword;
1429+
}
14251430
return identifierOrType();
14261431
case F32MAT2:
14271432
case F32MAT3:
@@ -1435,25 +1440,27 @@ int TScanContext::tokenizeIdentifier()
14351440
case F32MAT4X2:
14361441
case F32MAT4X3:
14371442
case F32MAT4X4:
1438-
afterType = true;
14391443
if (parseContext.symbolTable.atBuiltInLevel() ||
14401444
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
1441-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32))
1445+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
1446+
afterType = true;
14421447
return keyword;
1448+
}
14431449
return identifierOrType();
14441450

14451451
case FLOAT64_T:
14461452
case F64VEC2:
14471453
case F64VEC3:
14481454
case F64VEC4:
1449-
afterType = true;
1450-
if (parseContext.symbolTable.atBuiltInLevel() ||
1451-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
1452-
(parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) &&
1453-
parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
1454-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64))
1455-
return keyword;
1456-
return identifierOrType();
1455+
if (parseContext.symbolTable.atBuiltInLevel() ||
1456+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
1457+
(parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) &&
1458+
parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
1459+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
1460+
afterType = true;
1461+
return keyword;
1462+
}
1463+
return identifierOrType();
14571464
case F64MAT2:
14581465
case F64MAT3:
14591466
case F64MAT4:
@@ -1466,26 +1473,27 @@ int TScanContext::tokenizeIdentifier()
14661473
case F64MAT4X2:
14671474
case F64MAT4X3:
14681475
case F64MAT4X4:
1469-
afterType = true;
14701476
if (parseContext.symbolTable.atBuiltInLevel() ||
14711477
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
1472-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64))
1478+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
1479+
afterType = true;
14731480
return keyword;
1481+
}
14741482
return identifierOrType();
14751483

14761484
case FLOAT16_T:
14771485
case F16VEC2:
14781486
case F16VEC3:
14791487
case F16VEC4:
1480-
afterType = true;
14811488
if (parseContext.symbolTable.atBuiltInLevel() ||
14821489
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
14831490
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
14841491
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
14851492
parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
1486-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
1493+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
1494+
afterType = true;
14871495
return keyword;
1488-
1496+
}
14891497
return identifierOrType();
14901498

14911499
case F16MAT2:
@@ -1500,45 +1508,49 @@ int TScanContext::tokenizeIdentifier()
15001508
case F16MAT4X2:
15011509
case F16MAT4X3:
15021510
case F16MAT4X4:
1503-
afterType = true;
15041511
if (parseContext.symbolTable.atBuiltInLevel() ||
15051512
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
15061513
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
1507-
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
1514+
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
1515+
afterType = true;
15081516
return keyword;
1517+
}
15091518

15101519
return identifierOrType();
15111520

15121521
case BFLOAT16_T:
15131522
case BF16VEC2:
15141523
case BF16VEC3:
15151524
case BF16VEC4:
1516-
afterType = true;
15171525
if (parseContext.symbolTable.atBuiltInLevel() ||
1518-
parseContext.extensionTurnedOn(E_GL_EXT_bfloat16))
1526+
parseContext.extensionTurnedOn(E_GL_EXT_bfloat16)) {
1527+
afterType = true;
15191528
return keyword;
1529+
}
15201530

15211531
return identifierOrType();
15221532

15231533
case FLOATE5M2_T:
15241534
case FE5M2VEC2:
15251535
case FE5M2VEC3:
15261536
case FE5M2VEC4:
1527-
afterType = true;
15281537
if (parseContext.symbolTable.atBuiltInLevel() ||
1529-
parseContext.extensionTurnedOn(E_GL_EXT_float_e5m2))
1538+
parseContext.extensionTurnedOn(E_GL_EXT_float_e5m2)) {
1539+
afterType = true;
15301540
return keyword;
1541+
}
15311542

15321543
return identifierOrType();
15331544

15341545
case FLOATE4M3_T:
15351546
case FE4M3VEC2:
15361547
case FE4M3VEC3:
15371548
case FE4M3VEC4:
1538-
afterType = true;
15391549
if (parseContext.symbolTable.atBuiltInLevel() ||
1540-
parseContext.extensionTurnedOn(E_GL_EXT_float_e4m3))
1550+
parseContext.extensionTurnedOn(E_GL_EXT_float_e4m3)) {
1551+
afterType = true;
15411552
return keyword;
1553+
}
15421554

15431555
return identifierOrType();
15441556

@@ -1807,10 +1819,11 @@ int TScanContext::tokenizeIdentifier()
18071819

18081820
case F16SUBPASSINPUT:
18091821
case F16SUBPASSINPUTMS:
1810-
afterType = true;
18111822
if (parseContext.symbolTable.atBuiltInLevel() ||
1812-
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch))
1823+
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch)) {
1824+
afterType = true;
18131825
return keyword;
1826+
}
18141827
return identifierOrType();
18151828

18161829
case EXPLICITINTERPAMD:
@@ -1859,45 +1872,51 @@ int TScanContext::tokenizeIdentifier()
18591872
return identifierOrType();
18601873

18611874
case FCOOPMATNV:
1862-
afterType = true;
18631875
if (parseContext.symbolTable.atBuiltInLevel() ||
1864-
parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix))
1876+
parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix)) {
1877+
afterType = true;
18651878
return keyword;
1879+
}
18661880
return identifierOrType();
18671881

18681882
case UCOOPMATNV:
18691883
case ICOOPMATNV:
1870-
afterType = true;
18711884
if (parseContext.symbolTable.atBuiltInLevel() ||
1872-
parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix))
1885+
parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix)) {
1886+
afterType = true;
18731887
return keyword;
1888+
}
18741889
return identifierOrType();
18751890
case TENSORARM:
1876-
afterType = true;
18771891
if (parseContext.symbolTable.atBuiltInLevel() ||
1878-
parseContext.extensionTurnedOn(E_GL_ARM_tensors))
1892+
parseContext.extensionTurnedOn(E_GL_ARM_tensors)) {
1893+
afterType = true;
18791894
return keyword;
1895+
}
18801896
return identifierOrType();
18811897

18821898
case COOPMAT:
1883-
afterType = true;
18841899
if (parseContext.symbolTable.atBuiltInLevel() ||
1885-
parseContext.extensionTurnedOn(E_GL_KHR_cooperative_matrix))
1900+
parseContext.extensionTurnedOn(E_GL_KHR_cooperative_matrix)) {
1901+
afterType = true;
18861902
return keyword;
1903+
}
18871904
return identifierOrType();
18881905

18891906
case COOPVECNV:
1890-
afterType = true;
18911907
if (parseContext.symbolTable.atBuiltInLevel() ||
1892-
parseContext.extensionTurnedOn(E_GL_NV_cooperative_vector))
1908+
parseContext.extensionTurnedOn(E_GL_NV_cooperative_vector)) {
1909+
afterType = true;
18931910
return keyword;
1911+
}
18941912
return identifierOrType();
18951913

18961914
case VECTOR:
1897-
afterType = true;
18981915
if (parseContext.symbolTable.atBuiltInLevel() ||
1899-
parseContext.extensionTurnedOn(E_GL_EXT_long_vector))
1916+
parseContext.extensionTurnedOn(E_GL_EXT_long_vector)) {
1917+
afterType = true;
19001918
return keyword;
1919+
}
19011920
return identifierOrType();
19021921

19031922
case DEMOTE:
@@ -1952,10 +1971,11 @@ int TScanContext::tokenizeIdentifier()
19521971
case FUNCTION:
19531972
case TENSORLAYOUTNV:
19541973
case TENSORVIEWNV:
1955-
afterType = true;
19561974
if (parseContext.symbolTable.atBuiltInLevel() ||
1957-
parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix2))
1975+
parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
1976+
afterType = true;
19581977
return keyword;
1978+
}
19591979
return identifierOrType();
19601980

19611981
default:

gtests/Spv.FromFile.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@ INSTANTIATE_TEST_SUITE_P(
717717
"spv.intrinsicsInteractWithCoopMat.comp",
718718
"spv.longVector.comp",
719719
"spv.longVectorMatMul.comp",
720+
"spv.longVectorNotReserved.comp",
720721
"spv.longVectorSpecConst.comp",
721722
"spv.longVectorOperators.comp",
722723
"spv.longVectorBuiltins.comp",

0 commit comments

Comments
 (0)