Skip to content

[clang] Expose constexpr evaluation statistics #135764

Open
@BenBE

Description

@BenBE

When compiling constexpr-heavy code it would be nice to receive more feedback than "constexpr evaluation hit maximum step limit" or "constexpr evaluation exceeded maximum depth of N calls". Especially when you do not reach these limits with your code quite yet, getting some feedback, e.g. via the -ftime-trace or some other means, how much allowed resources compilation of your code took, would be nice.

In the easiest case, this could mean to publish the evaluation counter for each EvaluateAsInitializer call (and similar in the generated time trace log, along-side the maximum depth and the other tracked limits.

If evaluating a constexpr triggered recursively, these sub-expressions could get their own trace too.

template <typename T>
struct bar {
  static const T v;
};
template <typename T>
const T bar<T>::v = 21*sizeof(T);

template <typename T>
struct foo {
  static const T v;
};
template <typename T>
const T foo<T>::v = bar<T>::v;

int main() {
  return foo<short>::v;
}

A time trace report for the above code would then include the following listing:

foo<short>::v (steps=4, depth=2, loops=0)
  bar<short>::v (steps=3, depth=1, loops=0)

Other alternatives to produce such a report are welcome too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    clangClang issues not falling into any other categoryenhancementImproving things as opposed to bug fixing, e.g. new or missing feature

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions