Skip to content
Snippets Groups Projects
  • Nico Weber's avatar
    b279682b
    Port r163224 to C++. · b279682b
    Nico Weber authored
    The motivation is to fix a crash on
    
      struct S {} s;
      Foo S::~S() { s.~S(); }
    
    What was happening here was that S::~S() was marked as invalid since its
    return type is invalid, and as a consequence CheckFunctionDeclaration() wasn't
    called and S::~S() didn't get merged into S's implicit destructor.  This way,
    the class ended up with two destructors, which confused the overload printer
    when it suddenly had to print two possible destructors for `s.~S()`.
    
    In addition to fixing the crash, this change also seems to improve diagnostics
    in a few other places, see test changes.
    
    Crash found by SLi's bot.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229639 91177308-0d34-0410-b5e6-96231b3b80d8
    b279682b
    History
    Port r163224 to C++.
    Nico Weber authored
    The motivation is to fix a crash on
    
      struct S {} s;
      Foo S::~S() { s.~S(); }
    
    What was happening here was that S::~S() was marked as invalid since its
    return type is invalid, and as a consequence CheckFunctionDeclaration() wasn't
    called and S::~S() didn't get merged into S's implicit destructor.  This way,
    the class ended up with two destructors, which confused the overload printer
    when it suddenly had to print two possible destructors for `s.~S()`.
    
    In addition to fixing the crash, this change also seems to improve diagnostics
    in a few other places, see test changes.
    
    Crash found by SLi's bot.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229639 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.