[all-commits] [llvm/llvm-project] 665e87: [DebugInfo] When referencing structured bindings u...

David Blaikie via All-commits all-commits at lists.llvm.org
Tue Sep 2 14:04:20 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 665e875f1a86be650e044bb20744bb272d03e11d
      https://github.com/llvm/llvm-project/commit/665e875f1a86be650e044bb20744bb272d03e11d
  Author: David Blaikie <dblaikie at gmail.com>
  Date:   2025-09-02 (Tue, 02 Sep 2025)

  Changed paths:
    M clang/lib/CodeGen/CGCall.cpp
    M clang/lib/CodeGen/CGCall.h
    M clang/lib/CodeGen/CGExpr.cpp
    M clang/test/DebugInfo/CXX/structured-binding.cpp

  Log Message:
  -----------
  [DebugInfo] When referencing structured bindings use the reference's location, not the binding's declaration's location (#153637)

For structured bindings that use custom `get` specializations, the
resulting LLVM IR ascribes the load of the result of `get` to the
binding's declaration, rather than the place where the binding is
referenced - this caused awkward sequencing in the debug info where,
when stepping through the code you'd step back to the binding
declaration every time there was a reference to the binding.

To fix that - when we cross into IRGening a binding - suppress the debug
info location of that subexpression.

I don't represent this as a great bit of API design - certainly open to
ideas, but putting it out here as a place to start.

It's /possible/ this is an incomplete fix, even - if the binding decl
had other subexpressions, those would still get their location applied &
it'd likely be wrong.

So maybe that's a direction to go with to productionize this - add a new
location scoped device that suppresses any overriding - this might be
more robust. How do people feel about that?



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list