<html>
    <head>
      <base href="http://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 --- - Parser::ParseParameterDeclarationClause leaks memory"
   href="http://llvm.org/bugs/show_bug.cgi?id=19689">19689</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Parser::ParseParameterDeclarationClause leaks memory
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>All
          </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>nicolasweber@gmx.de
          </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>LSan reports:

Script:
--
/usr/local/google/ssd/asan-boot/stage2/./bin/clang -cc1 -internal-isystem
/usr/local/google/ssd/asan-boot/stage2/bin/../lib/clang/3.5.0/include
-std=c++11 -verify
/home/kcc/llvm/tools/clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp
--
Exit Code: 23

Command Output (stderr):
--

=================================================================
==26235==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 120 byte(s) in 1 object(s) allocated from:
    #0 0x7c0140 in operator new(unsigned long)
/home/kcc/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:62
    #1 0x44e56e9 in
clang::Parser::ParseParameterDeclarationClause(clang::Declarator&,
clang::ParsedAttributes&,
llvm::SmallVectorImpl<clang::DeclaratorChunk::ParamInfo>&,
clang::SourceLocation&) /home/kcc/llvm/tools/clang/lib/Parse/ParseDecl.cpp:5381
    #2 0x44dd719 in clang::Parser::ParseFunctionDeclarator(clang::Declarator&,
clang::ParsedAttributes&, clang::BalancedDelimiterTracker&, bool, bool)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDecl.cpp:5080
    #3 0x44d9025 in clang::Parser::ParseDirectDeclarator(clang::Declarator&)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDecl.cpp:4890
    #4 0x44d2ecd in clang::Parser::ParseDeclaratorInternal(clang::Declarator&,
void (clang::Parser::*)(clang::Declarator&))
/home/kcc/llvm/tools/clang/lib/Parse/ParseDecl.cpp:4554
    #5 0x4514fb0 in
clang::Parser::ParseCXXMemberDeclaratorBeforeInitializer(clang::Declarator&,
clang::VirtSpecifiers&, clang::ActionResult<clang::Expr*, true>&,
clang::Parser::LateParsedAttrList&)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:1922
    #6 0x4518bbc in
clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier,
clang::AttributeList*, clang::Parser::ParsedTemplateInfo const&,
clang::ParsingDeclRAIIObject*)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:2163
    #7 0x450d6a9 in
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation,
clang::SourceLocation, clang::Parser::ParsedAttributesWithRange&, unsigned int,
clang::Decl*) /home/kcc/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:2693
    #8 0x4508044 in clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext,
clang::Parser::ParsedAttributesWithRange&)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp:1623
    #9 0x44a4c52 in clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*)
/home/kcc/llvm/tools/clang/lib/Parse/ParseDecl.cpp:3068
    #10 0x446c13f in
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
/home/kcc/llvm/tools/clang/lib/Parse/Parser.cpp:829
    #11 0x446b7c5 in
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
/home/kcc/llvm/tools/clang/lib/Parse/Parser.cpp:902
    #12 0x4468009 in
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) /home/kcc/llvm/tools/clang/lib/Parse/Parser.cpp:760
    #13 0x4465a48 in
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
/home/kcc/llvm/tools/clang/lib/Parse/Parser.cpp:557
    #14 0x44586b0 in clang::ParseAST(clang::Sema&, bool, bool)
/home/kcc/llvm/tools/clang/lib/Parse/ParseAST.cpp:135
    #15 0x295d3fa in clang::FrontendAction::Execute()
/home/kcc/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:402
    #16 0x28dfea7 in
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/kcc/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:720
    #17 0x2ab531e in clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/kcc/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:239
    #18 0x7e749a in cc1_main(char const**, char const**, char const*, void*)
/home/kcc/llvm/tools/clang/tools/driver/cc1_main.cpp:112
    #19 0x7e2afd in main /home/kcc/llvm/tools/clang/tools/driver/driver.cpp:318
    #20 0x7f34c157a76c in __libc_start_main
/build/buildd/eglibc-2.15/csu/libc-start.c:226


The leak:

      if (Tok.is(tok::equal)) {
        SourceLocation EqualLoc = Tok.getLocation();

        // Parse the default argument
        if (D.getContext() == Declarator::MemberContext) {
          // If we're inside a class definition, cache the tokens
          // corresponding to the default argument. We'll actually parse
          // them when we see the end of the class definition.
          // FIXME: Can we use a smart pointer for Toks?
          DefArgToks = new CachedTokens;</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>