]> granicus.if.org Git - clang/commitdiff
Don't capture DeclRefExpr::getNameInfo().getInfo(). It returns reference in temporary...
authorNAKAMURA Takumi <geek4civic@gmail.com>
Wed, 29 Oct 2014 08:11:47 +0000 (08:11 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Wed, 29 Oct 2014 08:11:47 +0000 (08:11 +0000)
DeclarationNameInfo::getInfo() returns reference, but DeclRefExpr::getNameInfo() returns temporary DeclarationNameInfo().

It triggered a local crash for me.

  Failing Tests (1):
      Clang :: SemaTemplate/instantiate-overload-candidates.cpp

  Assertion failed!
  Program: bin\clang.EXE
  File: clang/lib/Basic/SourceManager.cpp, Line 822
  Expression: 0 && "Invalid SLocOffset or bad function choice"

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220841 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/TreeTransform.h

index c569d31f7e30944bbcc89ebf80d446162475fedb..854ff52f52a1fae0930e4fe6473756128c4c3b49 100644 (file)
@@ -10460,7 +10460,7 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op,
     SourceLocation RBrace;
 
     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Callee)) {
-        DeclarationNameLoc &NameLoc = DRE->getNameInfo().getInfo();
+        DeclarationNameLoc NameLoc = DRE->getNameInfo().getInfo();
         LBrace = SourceLocation::getFromRawEncoding(
                     NameLoc.CXXOperatorName.BeginOpNameLoc);
         RBrace = SourceLocation::getFromRawEncoding(