PP: Fix #783: Catch end-of-argument expansion in token pasting.

This commit is contained in:
John Kessenich 2017-04-04 12:28:20 -06:00
Родитель 82460b5e21
Коммит 97cb85c7d6
4 изменённых файлов: 15 добавлений и 3 удалений

Просмотреть файл

@ -8,7 +8,8 @@ ERROR: 0:69: '##' : combined token is invalid
ERROR: 0:82: 'macro expansion' : Too few args in Macro rec
ERROR: 0:82: '##' : unexpected location
ERROR: 0:82: '##' : unexpected location
ERROR: 8 compilation errors. No code generated.
ERROR: 0:86: '##' : unexpected location; end of argument
ERROR: 9 compilation errors. No code generated.
Shader version: 450

Просмотреть файл

@ -79,4 +79,8 @@ uniform M_OUTER(argPaste);
uniform M_OUTER2(argPaste);
#define rec(x)##
rec(rec())
rec(rec())
#define bax(bay)
#define baz bax(/##)
baz

Просмотреть файл

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1971"
#define GLSLANG_REVISION "Overload400-PrecQual.1974"
#define GLSLANG_DATE "04-Apr-2017"

Просмотреть файл

@ -799,6 +799,7 @@ int TPpContext::tokenPaste(int token, TPpToken& ppToken)
token = scanToken(&pastedPpToken);
assert(token == PpAtomPaste);
// This covers end of macro expansion
if (endOfReplacementList()) {
parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", "");
break;
@ -807,6 +808,12 @@ int TPpContext::tokenPaste(int token, TPpToken& ppToken)
// get the token after the ##
token = scanToken(&pastedPpToken);
// This covers end of argument expansion
if (token == tMarkerInput::marker) {
parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
break;
}
// get the token text
switch (resultToken) {
case PpAtomIdentifier: