<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </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 - Some clang diagnostic produces overlapping FixIts which crashes clang-tidy"
   href="https://bugs.llvm.org/show_bug.cgi?id=35136">35136</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Some clang diagnostic produces overlapping FixIts which crashes clang-tidy
          </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>enhancement
          </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>lebedev.ri@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>While working on <a href="https://reviews.llvm.org/D36836">https://reviews.llvm.org/D36836</a>, i noticed that it's tests
trigger an assert in clang-tidy.
Here is the reproducer: (insert into
unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp)

class TestWithoutFixitsCheck : public ClangTidyCheck {
public:
  TestWithoutFixitsCheck(StringRef Name, ClangTidyContext *Context)
      : ClangTidyCheck(Name, Context) {}
  void registerMatchers(ast_matchers::MatchFinder *Finder) override {
    Finder->addMatcher(ast_matchers::functionDecl().bind("func"), this);
  }
  void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
    const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>("func");
    diag(Func->getLocation(), "hello");
  }
};

TEST(ClangTidyDiagnosticConsumer, DoesNotParseNotesAsFixIts) {
  // Test that it does not die with an assert.
  runCheckOnCode<TestWithoutFixitsCheck>("void a() { 1 && 1; }");
}

In build with asserts, it fails with:
$ ninja check-clang-tools 
[0/1] Running the Clang extra tools' regression tests
FAIL: Extra Tools Unit Tests ::
clang-tidy/./ClangTidyTests/ClangTidyDiagnosticConsumer.DoesNotParseNotesAsFixIts
(500 of 591)
******************** TEST 'Extra Tools Unit Tests ::
clang-tidy/./ClangTidyTests/ClangTidyDiagnosticConsumer.DoesNotParseNotesAsFixIts'
FAILED ********************
Note: Google Test filter =
ClangTidyDiagnosticConsumer.DoesNotParseNotesAsFixIts
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from ClangTidyDiagnosticConsumer
[ RUN      ] ClangTidyDiagnosticConsumer.DoesNotParseNotesAsFixIts
Fix conflicts with existing fix! The new replacement overlaps with an existing
replacement.
New replacement: input.cc: 12:+5:""
Existing replacement: input.cc: 13:+2:"&"
ClangTidyTests:
/build/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp:86: virtual
void (anonymous
namespace)::ClangTidyDiagnosticRenderer::emitCodeContext(clang::FullSourceLoc,
DiagnosticsEngine::Level, SmallVectorImpl<clang::CharSourceRange> &,
ArrayRef<clang::FixItHint>): Assertion `false && "Fix conflicts with existing
fix!"' failed.
#0 0x000000000074fee4 PrintStackTraceSignalHandler(void*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x74fee4)
#1 0x0000000000750246 SignalHandler(int)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x750246)
#2 0x00007f35c919c0c0 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x110c0)
#3 0x00007f35c7d1dfff gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x32fff)
#4 0x00007f35c7d1f42a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3442a)
#5 0x00007f35c7d16e67 (/lib/x86_64-linux-gnu/libc.so.6+0x2be67)
#6 0x00007f35c7d16f12 (/lib/x86_64-linux-gnu/libc.so.6+0x2bf12)
#7 0x0000000000ba787c (anonymous
namespace)::ClangTidyDiagnosticRenderer::emitCodeContext(clang::FullSourceLoc,
clang::DiagnosticsEngine::Level,
llvm::SmallVectorImpl<clang::CharSourceRange>&,
llvm::ArrayRef<clang::FixItHint>)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xba787c)
#8 0x0000000000b07be4
clang::DiagnosticRenderer::emitDiagnostic(clang::FullSourceLoc,
clang::DiagnosticsEngine::Level, llvm::StringRef,
llvm::ArrayRef<clang::CharSourceRange>, llvm::ArrayRef<clang::FixItHint>,
llvm::PointerUnion<clang::Diagnostic const*, clang::StoredDiagnostic const*>)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xb07be4)
#9 0x0000000000ba5559
clang::tidy::ClangTidyDiagnosticConsumer::HandleDiagnostic(clang::DiagnosticsEngine::Level,
clang::Diagnostic const&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xba5559)
#10 0x0000000000a08159
clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xa08159)
#11 0x0000000000a01d5a clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xa01d5a)
#12 0x0000000000f2dca9 clang::Sema::EmitCurrentDiagnostic(unsigned int)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xf2dca9)
#13 0x00000000011f968a
clang::Sema::CheckLogicalOperands(clang::ActionResult<clang::Expr*, true>&,
clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation,
clang::BinaryOperatorKind)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x11f968a)
#14 0x00000000011f712b clang::Sema::CreateBuiltinBinOp(clang::SourceLocation,
clang::BinaryOperatorKind, clang::Expr*, clang::Expr*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x11f712b)
#15 0x00000000011c0f12 clang::Sema::ActOnBinOp(clang::Scope*,
clang::SourceLocation, clang::tok::TokenKind, clang::Expr*, clang::Expr*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x11c0f12)
#16 0x0000000000d13f5f
clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*,
true>, clang::prec::Level)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd13f5f)
#17 0x0000000000d13332
clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd13332)
#18 0x0000000000d13219
clang::Parser::ParseExpression(clang::Parser::TypeCastState)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd13219)
#19 0x0000000000d382b6 clang::Parser::ParseExprStatement()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd382b6)
#20 0x0000000000d372fb
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::AllowedConstructsKind, clang::SourceLocation*,
clang::Parser::ParsedAttributesWithRange&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd372fb)
#21 0x0000000000d36ed2
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::AllowedConstructsKind, clang::SourceLocation*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd36ed2)
#22 0x0000000000d3d871 clang::Parser::ParseCompoundStatementBody(bool)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd3d871)
#23 0x0000000000d3e0b3 clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xd3e0b3)
#24 0x0000000000cccf91
clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xcccf91)
#25 0x0000000000cf2e80 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&,
unsigned int, clang::SourceLocation*, clang::Parser::ForRangeInit*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xcf2e80)
#26 0x0000000000ccc27d
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xccc27d)
#27 0x0000000000ccbbf3
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xccbbf3)
#28 0x0000000000ccaf96
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xccaf96)
#29 0x0000000000cc99d4
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xcc99d4)
#30 0x0000000000cc9641
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xcc9641)
#31 0x0000000000cc59a4 clang::ParseAST(clang::Sema&, bool, bool)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xcc59a4)
#32 0x0000000000a4b4d0 clang::FrontendAction::Execute()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xa4b4d0)
#33 0x0000000000a967e1
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xa967e1)
#34 0x0000000000bd6476
clang::tooling::FrontendActionFactory::runInvocation(std::shared_ptr<clang::CompilerInvocation>,
clang::FileManager*, std::shared_ptr<clang::PCHContainerOperations>,
clang::DiagnosticConsumer*)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xbd6476)
#35 0x0000000000bd61e9 clang::tooling::ToolInvocation::runInvocation(char
const*, clang::driver::Compilation*,
std::shared_ptr<clang::CompilerInvocation>,
std::shared_ptr<clang::PCHContainerOperations>)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xbd61e9)
#36 0x0000000000bd5bb7 clang::tooling::ToolInvocation::run()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0xbd5bb7)
#37 0x0000000000691d38 std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >
clang::tidy::test::runCheckOnCode<clang::tidy::test::TestWithoutFixitsCheck>(llvm::StringRef,
std::vector<clang::tidy::ClangTidyError,
std::allocator<clang::tidy::ClangTidyError> >*, llvm::Twine const&,
llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, clang::tidy::ClangTidyOptions const&,
std::map<llvm::StringRef, llvm::StringRef, std::less<llvm::StringRef>,
std::allocator<std::pair<llvm::StringRef const, llvm::StringRef> > >)
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x691d38)
#38 0x0000000000691003
clang::tidy::test::ClangTidyDiagnosticConsumer_DoesNotParseNotesAsFixIts_Test::TestBody()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x691003)
#39 0x0000000000759913 testing::Test::Run()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x759913)
#40 0x000000000075a7b0 testing::TestInfo::Run()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x75a7b0)
#41 0x000000000075aff7 testing::TestCase::Run()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x75aff7)
#42 0x0000000000764807 testing::internal::UnitTestImpl::RunAllTests()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x764807)
#43 0x00000000007642e8 testing::UnitTest::Run()
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x7642e8)
#44 0x0000000000750bce main
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x750bce)
#45 0x00007f35c7d0b2e1 __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x202e1)
#46 0x000000000068f02a _start
(/build/llvm-build-Clang-release/tools/clang/tools/extra/unittests/clang-tidy/./ClangTidyTests+0x68f02a)

********************
Testing Time: 5.83s
********************
Failing Tests (1):
    Extra Tools Unit Tests ::
clang-tidy/./ClangTidyTests/ClangTidyDiagnosticConsumer.DoesNotParseNotesAsFixIts

  Expected Passes    : 589
  Unsupported Tests  : 1
  Unexpected Failures: 1
FAILED: tools/clang/tools/extra/test/CMakeFiles/check-clang-tools 
cd /build/llvm-build-Clang-release/tools/clang/tools/extra/test &&
/usr/bin/python2.7 /build/llvm-build-Clang-release/./bin/llvm-lit -sv
/build/llvm-build-Clang-release/tools/clang/tools/extra/test
ninja: build stopped: subcommand failed.</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>