Edit

kc3-lang/angle/src/tests/compiler_tests/RewriteDoWhile_test.cpp

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2017-12-04 23:40:14
    Hash : 195be942
    Message : Always create TVariables for TIntermSymbol nodes TIntermSymbol nodes are now constructed based on a specific TVariable. This makes sure that all TIntermSymbol nodes that are created to refer to a specific temporary in an AST transform will have consistent data. The TVariable objects are not necessarily added to the symbol table levels - just those variables that can be referred to by their name during parsing need to be reachable through there. In the future this can be taken a step further so that TIntermSymbol nodes just to point to a TVariable instead of duplicating the information. BUG=angleproject:2267 TEST=angle_unittests Change-Id: I4e7bcdb0637cd3b588d3c202ef02f4b7bd7954a1 Reviewed-on: https://chromium-review.googlesource.com/811925 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org>

  • src/tests/compiler_tests/RewriteDoWhile_test.cpp
  • //
    // Copyright (c) 2017 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // RewriteDoWhile_test.cpp:
    //   Tests that the RewriteDoWhile AST transform works correctly.
    //
    
    #include "GLSLANG/ShaderLang.h"
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "tests/test_utils/ShaderCompileTreeTest.h"
    
    using namespace sh;
    
    class RewriteDoWhileCrashTest : public ShaderCompileTreeTest
    {
      public:
        RewriteDoWhileCrashTest() {}
    
      protected:
        ::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
        ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
    
        void SetUp() override
        {
            mExtraCompileOptions |= SH_REWRITE_DO_WHILE_LOOPS;
            ShaderCompileTreeTest::SetUp();
        }
    };
    
    // Make sure that the RewriteDoWhile step doesn't crash. Regression test.
    TEST_F(RewriteDoWhileCrashTest, RunsSuccessfully)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "uniform int u;\n"
            "out vec4 my_FragColor;\n"
            "void main()\n"
            "{\n"
            "    int foo = 1;"
            "    do\n"
            "    {\n"
            "         foo *= u;\n"
            "    } while (foo < 8);\n"
            "    my_FragColor = vec4(foo) * 0.1;"
            "}\n";
        if (!compile(shaderString))
        {
            FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
        }
    }