diff --git a/Test/baseResults/310.inheritMemory.frag.out b/Test/baseResults/310.inheritMemory.frag.out index 769a096c..6d5528b2 100644 --- a/Test/baseResults/310.inheritMemory.frag.out +++ b/Test/baseResults/310.inheritMemory.frag.out @@ -1,14 +1,6 @@ 310.inheritMemory.frag -ERROR: 0:38: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter -ERROR: 0:39: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter -ERROR: 0:40: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter -ERROR: 0:41: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter -ERROR: 0:42: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter -ERROR: 5 compilation errors. No code generated. - - Shader version: 310 -ERROR: node is still EOpNull! +0:? Sequence 0:18 Function Definition: non_ro_fun(f1[10]; ( global void) 0:18 Function Parameters: 0:18 'buff' ( in 10-element array of mediump float) @@ -120,7 +112,7 @@ Linked fragment stage: Shader version: 310 -ERROR: node is still EOpNull! +0:? Sequence 0:18 Function Definition: non_ro_fun(f1[10]; ( global void) 0:18 Function Parameters: 0:18 'buff' ( in 10-element array of mediump float) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 0b0f94ce..33a16641 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1152,8 +1152,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped())) error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", ""); } - TQualifier& argQualifier = arg->getAsTyped()->getQualifier(); - if (argQualifier.isMemory()) { + const TType& argType = arg->getAsTyped()->getType(); + const TQualifier& argQualifier = argType.getQualifier(); + if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) { const char* message = "argument cannot drop memory qualifier when passed to formal parameter"; if (argQualifier.volatil && ! formalQualifier.volatil) error(arguments->getLoc(), message, "volatile", "");