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

Reply via email to