================
@@ -2706,14 +2700,16 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, 
ParamValue Arg,
   bool DoStore = false;
   bool IsScalar = hasScalarEvaluationKind(Ty);
   bool UseIndirectDebugAddress = false;
+  LangAS DestLangAS = getLangOpts().OpenCL   ? LangAS::opencl_private
----------------
vtjnash wrote:

I completely agree, and that was my intent with this PR. This code is already 
modal on those two languages (in opposite directions, with opencl not adding 
implicit `__private` when it should and OpenMP adding implicit `__private` when 
it should not). My hope was that by landing this PR, we can then separately 
address each of OpenMP and OpenCL's (and also WebAsm) producing Sema results 
that are inconsistent with what they wanted to happen here.

FWIW, I think the sticking point for the qualifiers is that the meaning of 
`&char []` depends on context so it _should_ affect the deep type when 
describing a variable but _not_ when it is a parameter, and presently Sema can 
currently only represent the former and not the later:
```
  | Context                | Type of a            | Type of &a |
  |------------------------|----------------------|------------|
  | void f(char a[])       | char * (adjusted)    | char **    |
  | void f() { char a[]; } | char [] (unadjusted) | char (*)[] |
```
IIUC, in both cases, the qualifier can be written inside the `[]` instead if 
the intent is to affect the outer type per C11 6.7.6.2p7, but Sema can't yet 
handle that for addrspace written there as it only implements space for 
const/volatile/static attributes to appear there.

https://github.com/llvm/llvm-project/pull/181256
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to