<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 --- - Regression (crash) about write to read-only variable"
   href="https://llvm.org/bugs/show_bug.cgi?id=24568">24568</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Regression (crash) about write to read-only variable
          </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>C++
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>abramo.bagnara@bugseng.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>$ cat p.cc
int var;

const int& foo() {return var;}

typedef const int &Func();

Func& bar() {return foo;}

void test()
{
  bar()() = 0;
}
$ clang++-3.6 -cc1 p.cc
p.cc:11:11: error: read-only variable is not assignable
  bar()() = 0;
  ~~~~~~~ ^
1 error generated.
$ clang++-3.8 -cc1 p.cc
0  libLLVM-3.8.so.1 0x00007f3c978b3588
llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 56
1  libLLVM-3.8.so.1 0x00007f3c978b2926 llvm::sys::RunSignalHandlers() + 54
2  libLLVM-3.8.so.1 0x00007f3c978b2a7b
3  libpthread.so.0  0x00007f3c96226340
4  clang++-3.8      0x0000000000c40f4e
5  clang++-3.8      0x0000000000c41ce3
6  clang++-3.8      0x0000000000c5eb0a
clang::Sema::CheckAssignmentOperands(clang::Expr*,
clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation,
clang::QualType) + 42
7  clang++-3.8      0x0000000000c5fa1c
clang::Sema::CreateBuiltinBinOp(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) + 2364
8  clang++-3.8      0x0000000000c60b01 clang::Sema::BuildBinOp(clang::Scope*,
clang::SourceLocation, clang::BinaryOperatorKind, clang::Expr*, clang::Expr*) +
289
9  clang++-3.8      0x0000000000c60d45 clang::Sema::ActOnBinOp(clang::Scope*,
clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*) + 117
10 clang++-3.8      0x0000000000a735aa
clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*,
true>, clang::prec::Level) + 1562
11 clang++-3.8      0x0000000000a72f0f
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) + 47
12 clang++-3.8      0x0000000000a72f79
clang::Parser::ParseExpression(clang::Parser::TypeCastState) + 9
13 clang++-3.8      0x0000000000aab166 clang::Parser::ParseExprStatement() + 54
14 clang++-3.8      0x0000000000aaa36f
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
+ 3151
15 clang++-3.8      0x0000000000aaa4f4
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) + 116
16 clang++-3.8      0x0000000000aa7181
clang::Parser::ParseCompoundStatementBody(bool) + 1601
17 clang++-3.8      0x0000000000aaecde
clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) + 190
18 clang++-3.8      0x0000000000a41c41
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) +
1281
19 clang++-3.8      0x0000000000a58118
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned int,
clang::SourceLocation*, clang::Parser::ForRangeInit*) + 1976
20 clang++-3.8      0x0000000000a3dbf2
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier) + 274
21 clang++-3.8      0x0000000000a3e25e
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) + 942
22 clang++-3.8      0x0000000000a43563
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) + 259
23 clang++-3.8      0x0000000000a43d4b
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) + 411
24 clang++-3.8      0x0000000000a3b863 clang::ParseAST(clang::Sema&, bool,
bool) + 371
25 clang++-3.8      0x00000000006d414e clang::FrontendAction::Execute() + 254
26 clang++-3.8      0x00000000006b19d8
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 280
27 clang++-3.8      0x0000000000699de4
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1892
28 clang++-3.8      0x0000000000692928 cc1_main(llvm::ArrayRef<char const*>,
char const*, void*) + 2104
29 clang++-3.8      0x0000000000690afc main + 5708
30 libc.so.6        0x00007f3c958dfec5 __libc_start_main + 245
31 clang++-3.8      0x0000000000691284
Stack dump:
0.    Program arguments: clang++-3.8 -cc1 p.cc 
1.    p.cc:11:14: current parser token ';'
2.    p.cc:10:1: parsing function body 'test'
3.    p.cc:10:1: in compound statement ('{}')
Segmentation fault</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>