Made '\' at end of C++ comments be a warning. It is line continuation for some versions, but not others.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24396 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich
2013-12-06 21:45:15 +00:00
parent 828dc87a7c
commit 64bcb105c9
10 changed files with 45 additions and 23 deletions

View File

@@ -1,5 +1,7 @@
comment.frag comment.frag
Warning, version 430 is not yet complete; some version-specific features are present, but many are missing. Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
WARNING: 0:10: 'line continuation' : used at end of comment; the following line is still part of the comment
WARNING: 0:12: 'line continuation' : used at end of comment; the following line is still part of the comment
0:? Sequence 0:? Sequence
0:17 Function Definition: main( (void) 0:17 Function Definition: main( (void)

View File

@@ -1,4 +1,5 @@
lineContinuation.vert lineContinuation.vert
WARNING: 0:3: 'line continuation' : used at end of comment; the following line is still part of the comment
ERROR: 0:6: '#error' : e1 ERROR: 0:6: '#error' : e1
ERROR: 0:11: '#error' : e2 ERROR: 0:11: '#error' : e2
ERROR: 0:18: '#error' : e3 ERROR: 0:18: '#error' : e3
@@ -25,6 +26,7 @@ ERROR: node is still EOpNull!
0:25 'b' (highp 4-component vector of float) 0:25 'b' (highp 4-component vector of float)
0:? Linker Objects 0:? Linker Objects
0:? 'foo' (highp float) 0:? 'foo' (highp float)
0:? 'goodDecl' (highp int)
0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_VertexID' (gl_VertexId highp int)
0:? 'gl_InstanceID' (gl_InstanceId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int)

View File

@@ -1,6 +1,6 @@
lineContinuation100.vert lineContinuation100.vert
ERROR: 0:3: 'line continuation' : not supported for this version or the enabled extensions WARNING: 0:3: 'line continuation' : used at end of comment, but this version does not provide line continuation
ERROR: 0:6: '#error' : e1 ERROR: 0:4: '#error' : good error
ERROR: 0:8: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:8: 'line continuation' : not supported for this version or the enabled extensions
ERROR: 0:11: '#error' : e2 ERROR: 0:11: '#error' : e2
ERROR: 0:13: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:13: 'line continuation' : not supported for this version or the enabled extensions
@@ -8,7 +8,7 @@ ERROR: 0:14: 'line continuation' : not supported for this version or the enabled
ERROR: 0:15: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:15: 'line continuation' : not supported for this version or the enabled extensions
ERROR: 0:18: '#error' : e3 ERROR: 0:18: '#error' : e3
ERROR: 0:24: 'line continuation' : not supported for this version or the enabled extensions ERROR: 0:24: 'line continuation' : not supported for this version or the enabled extensions
ERROR: 9 compilation errors. No code generated. ERROR: 8 compilation errors. No code generated.
ERROR: node is still EOpNull! ERROR: node is still EOpNull!

View File

@@ -28,3 +28,9 @@ vec4 foo2(vec4 a)
// aoeuntheo unatehutna \ antaehnathe // aoeuntheo unatehutna \ antaehnathe
// anteonuth $ natohe " ' // anteonuth $ natohe " '
// anteonuth natohe // anteonuth natohe
#define FOO int /* \
*/ goodDecl;
FOO

View File

@@ -1,9 +1,9 @@
#version 100 #version 100
// this file cont\ // non-line continuation comment \
ains no errors other than the #error which are there to see if line numbering for errors is correct #error good error
#error e1
float f\ float f\
oo; // same as 'float foo;' oo; // same as 'float foo;'

View File

@@ -9,5 +9,5 @@
// source have to figure out how to create revision.h just to get a build // source have to figure out how to create revision.h just to get a build
// going. However, if it is not updated, it can be a version behind. // going. However, if it is not updated, it can be a version behind.
#define GLSLANG_REVISION "24390" #define GLSLANG_REVISION "24391"
#define GLSLANG_DATE "2013/12/06 11:19:22" #define GLSLANG_DATE "2013/12/06 11:24:47"

View File

@@ -1410,13 +1410,22 @@ void TParseContext::reservedPpErrorCheck(TSourceLoc loc, const char* identifier,
// //
// See if this version/profile allows use of the line-continuation character '\'. // See if this version/profile allows use of the line-continuation character '\'.
// //
void TParseContext::lineContinuationCheck(TSourceLoc loc) bool TParseContext::lineContinuationCheck(TSourceLoc loc, bool endOfComment)
{ {
if ((profile == EEsProfile && version >= 300) ||
(profile != EEsProfile && version >= 420))
return;
const char* message = "line continuation"; const char* message = "line continuation";
bool lineContinuationAllowed = (profile == EEsProfile && version >= 300) ||
(profile != EEsProfile && version >= 420);
if (endOfComment) {
if (lineContinuationAllowed)
warn(loc, "used at end of comment; the following line is still part of the comment", message, "");
else
warn(loc, "used at end of comment, but this version does not provide line continuation", message, "");
return lineContinuationAllowed;
}
if (messages & EShMsgRelaxedErrors) { if (messages & EShMsgRelaxedErrors) {
warn(loc, "not allowed in this version", message, ""); warn(loc, "not allowed in this version", message, "");
} else { } else {

View File

@@ -76,7 +76,7 @@ public:
const char *szExtraInfoFormat, ...); const char *szExtraInfoFormat, ...);
bool reservedErrorCheck(TSourceLoc, const TString&); bool reservedErrorCheck(TSourceLoc, const TString&);
void reservedPpErrorCheck(TSourceLoc, const char* name, const char* op); void reservedPpErrorCheck(TSourceLoc, const char* name, const char* op);
void lineContinuationCheck(TSourceLoc); bool lineContinuationCheck(TSourceLoc, bool endOfComment);
bool builtInName(const TString&); bool builtInName(const TString&);
void handlePragma(TSourceLoc, const TVector<TString>&); void handlePragma(TSourceLoc, const TVector<TString>&);

View File

@@ -191,7 +191,7 @@ int TPpContext::CPPdefine(TPpToken* ppToken)
mac.body = new TokenStream; mac.body = new TokenStream;
while (token != '\n') { while (token != '\n') {
if (token == '\\') { if (token == '\\') {
parseContext.lineContinuationCheck(ppToken->loc); parseContext.lineContinuationCheck(ppToken->loc, false);
token = currentInput->scan(this, currentInput, ppToken); token = currentInput->scan(this, currentInput, ppToken);
if (token == '\n' || token == '\r') if (token == '\n' || token == '\r')
token = currentInput->scan(this, currentInput, ppToken); token = currentInput->scan(this, currentInput, ppToken);

View File

@@ -285,7 +285,7 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
do { do {
if (ch == '\\') { if (ch == '\\') {
// escaped character // escaped character
pp->parseContext.lineContinuationCheck(ppToken->loc); pp->parseContext.lineContinuationCheck(ppToken->loc, false);
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
if (ch == '\r' || ch == '\n') { if (ch == '\r' || ch == '\n') {
int nextch = pp->currentInput->getch(pp, pp->currentInput, ppToken); int nextch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
@@ -641,12 +641,15 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
// allow an escaped newline, otherwise escapes in comments are meaningless // allow an escaped newline, otherwise escapes in comments are meaningless
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
if (ch == '\r' || ch == '\n') { if (ch == '\r' || ch == '\n') {
pp->parseContext.lineContinuationCheck(ppToken->loc); if (! pp->parseContext.lineContinuationCheck(ppToken->loc, true))
int nextch = pp->currentInput->getch(pp, pp->currentInput, ppToken); pp->currentInput->ungetch(pp, pp->currentInput, ch, ppToken);
if (ch == '\r' && nextch == '\n') else {
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); int nextch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
else if (ch == '\r' && nextch == '\n')
ch = nextch; ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
else
ch = nextch;
}
} }
} }
} while (ch != '\n' && ch != EOF); } while (ch != '\n' && ch != EOF);
@@ -684,7 +687,7 @@ int TPpContext::sourceScan(TPpContext* pp, InputSrc*, TPpToken* ppToken)
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
while (ch != '"' && ch != '\n' && ch != EOF) { while (ch != '"' && ch != '\n' && ch != EOF) {
if (ch == '\\') { if (ch == '\\') {
pp->parseContext.lineContinuationCheck(ppToken->loc); pp->parseContext.lineContinuationCheck(ppToken->loc, false);
ch = pp->currentInput->getch(pp, pp->currentInput, ppToken); ch = pp->currentInput->getch(pp, pp->currentInput, ppToken);
if (ch == '\n' || ch == '\r' || ch == EOF) if (ch == '\n' || ch == '\r' || ch == EOF)
break; break;