jcsxky wrote: > So, looked into this more. You are correct that `Function` needs not be > dependent because we only ever show the name of the function unqualified. > However, `FunctionSig` does. Here is an example of what we are trying to > preserve https://godbolt.org/z/M3eTa8nn5 (the clang 17 behavior was incorrect) > > I apologize for not realizing earlier that your change was actually sensible > in the case of `Function`
Never mind! After looking into the code a little bit more, `FunctionSig` indeed needs to be dependent. ```cpp template<int N> constexpr int g() { return N; } template <typename T> struct S { void f(auto) { constexpr const char* F = __builtin_FUNCSIG(); static_assert(__builtin_strlen(F)==g<__builtin_strlen(F)>()); } }; void f(){ S<int>{}.f(0); } ``` However, it still crash when we changed from `__builtin_FUNCTION` to `__builtin_FUNCSIG` in the testcase from https://github.com/llvm/llvm-project/issues/80210. The underlying issue is that `CurContext` is `FunctionTemplateDecl` which is dependent and we used it as `ParentContext` of `SourceLocExpr` when transforming `decltype` of function `construct_at`. This makes transformed return type of `construct_at` dependent which is not what we want. I will close this patch since it doesn't resolve the underlying issue. Thanks for your time for the review! @cor3ntin https://github.com/llvm/llvm-project/pull/94942 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits