<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - Assertion when assigning to a variable in the OpenCL __constant address space"
   href="https://llvm.org/bugs/show_bug.cgi?id=22881">22881</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Assertion when assigning to a variable in the OpenCL __constant address space
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Frontend
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>fraser@codeplay.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Trying to compile this OpenCL program:

__constant int a = 1;

__kernel void foo() {
  a = 1;
}


results in an assertion inside clang.

lib/Sema/SemaExpr.cpp:8823: NonConstCaptureKind
isReferenceToNonConstCapture(clang::Sema&, clang::Expr*): Assertion
`E->isLValue() && E->getType().isConstQualified()' failed.


The full stack trace is here:

clang: /home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:8823:
NonConstCaptureKind isReferenceToNonConstCapture(clang::Sema&, clang::Expr*):
Assertion `E->isLValue() && E->getType().isConstQualified()' failed.
#0 0x97960e2 llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/home/fraser/llvm-trunk/llvm/lib/Support/Unix/Signals.inc:425:0
#1 0x97963d4 PrintStackTraceSignalHandler(void*)
/home/fraser/llvm-trunk/llvm/lib/Support/Unix/Signals.inc:482:0
#2 0x9795009 SignalHandler(int)
/home/fraser/llvm-trunk/llvm/lib/Support/Unix/Signals.inc:200:0
#3 0xf774bbc0 (linux-gate.so.1+0xbc0)
#4 0xf774bbf0 (linux-gate.so.1+0xbf0)
#5 0xf7387cc7 __GI_raise (/usr/lib32/libc.so.6+0x2bcc7)
#6 0xf7389309 __GI_abort (/usr/lib32/libc.so.6+0x2d309)
#7 0xf7380dd7 __assert_fail_base (/usr/lib32/libc.so.6+0x24dd7)
#8 0xf7380e5b (/usr/lib32/libc.so.6+0x24e5b)
#9 0xaa47ffa isReferenceToNonConstCapture(clang::Sema&, clang::Expr*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:8823:0
#10 0xaa48258 CheckForModifiableLvalue(clang::Expr*, clang::SourceLocation,
clang::Sema&)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:8869:0
#11 0xaa489b5 clang::Sema::CheckAssignmentOperands(clang::Expr*,
clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation,
clang::QualType)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:8988:0
#12 0xaa4c019 clang::Sema::CreateBuiltinBinOp(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:9752:0
#13 0xaa4e61a clang::Sema::BuildBinOp(clang::Scope*, clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:10212:0
#14 0xaa4dfb8 clang::Sema::ActOnBinOp(clang::Scope*, clang::SourceLocation,
clang::tok::TokenKind, clang::Expr*, clang::Expr*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Sema/SemaExpr.cpp:10114:0
#15 0xa6aa19f
clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*,
true>, clang::prec::Level)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseExpr.cpp:416:0
#16 0xa6a91d9
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseExpr.cpp:170:0
#17 0xa6a8fc6 clang::Parser::ParseExpression(clang::Parser::TypeCastState)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseExpr.cpp:121:0
#18 0xa6ddfca clang::Parser::ParseExprStatement()
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseStmt.cpp:384:0
#19 0xa6dd911
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseStmt.cpp:220:0
#20 0xa6dd20e
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseStmt.cpp:107:0
#21 0xa6e005f clang::Parser::ParseCompoundStatementBody(bool)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseStmt.cpp:958:0
#22 0xa6e3159 clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseStmt.cpp:1873:0
#23 0xa6764d4 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/Parser.cpp:1103:0
#24 0xa685b4f clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned
int, clang::SourceLocation*, clang::Parser::ForRangeInit*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseDecl.cpp:1689:0
#25 0xa6758a3
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/Parser.cpp:893:0
#26 0xa675959
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/Parser.cpp:909:0
#27 0xa675190
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/Parser.cpp:767:0
#28 0xa674862
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/Parser.cpp:569:0
#29 0xa66dd58 clang::ParseAST(clang::Sema&, bool, bool)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Parse/ParseAST.cpp:144:0
#30 0x9978e17 clang::ASTFrontendAction::ExecuteAction()
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:538:0
#31 0x9978885 clang::FrontendAction::Execute()
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:439:0
#32 0x99421e0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:806:0
#33 0x9a80cba clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/fraser/llvm-trunk/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:222:0
#34 0x8ce1fc3 cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
/home/fraser/llvm-trunk/llvm/tools/clang/tools/driver/cc1_main.cpp:110:0
#35 0x8cda9a7 ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef)
/home/fraser/llvm-trunk/llvm/tools/clang/tools/driver/driver.cpp:369:0
#36 0x8cdaf4f main
/home/fraser/llvm-trunk/llvm/tools/clang/tools/driver/driver.cpp:415:0
#37 0xf737464e __libc_start_main (/usr/lib32/libc.so.6+0x1864e)
#38 0x8cd7d61 _start (/home/fraser/llvm-trunk/build/bin/clang-3.5+0x8cd7d61)
Stack dump:
0.      Program arguments: ./build/bin/clang -cc1 constant.cl 
1.      constant.cl:4:8: current parser token ';'
2.      constant.cl:3:21: parsing function body 'foo'
3.      constant.cl:3:21: in compound statement ('{}')</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>