Xiangling_L marked 5 inline comments as done.
Xiangling_L added inline comments.


================
Comment at: clang/lib/CodeGen/CodeGenModule.h:1482
+  void AddGlobalDtor(llvm::Function *Dtor, int Priority = 65535,
+                     bool IsDtorAttrFunc = false);
 
----------------
aaron.ballman wrote:
> Xiangling_L wrote:
> > aaron.ballman wrote:
> > > There's a fixme comment a few lines up about hardcoding priority being 
> > > gross and this sort of extends the grossness a bit. Perhaps these 
> > > functions should accept a `DestructorAttr *`/`ConstructorAttr *` that can 
> > > be null?
> > Yeah, I can understand that putting a magic number as 65535 here is gross, 
> > but a `bool` with default argument also falls into that way? Or you are 
> > indicating it's better to not use default argument?
> I think the signature should be:
> ```
> void AddGlobalDtor(llvm::Function *Dtor, DestructorAttr *DA = nullptr);
> ```
> (I don't have strong opinions about whether the attribute pointer should be 
> defaulted to null or not.) `IsDtorAttrFunc` is implied by a nonnull pointer 
> and the priority can be gleaned directly from that attribute (or set to the 
> magic number if the attribute pointer is null).
Oh, I see what do you mean here. But the issue is `AddGlobalDtor` is not only 
used for dtor attribute functions, so we cannot always glean the priority from 
a `DestructorAttr`.

If use `DestructorAttr`, the function signature has to be:


```
void AddGlobalDtor(llvm::Function *Dtor, int Priority, DestructorAttr *DA = 
nullptr);
```

So that's why I think a `bool` is good enough here.


================
Comment at: clang/lib/CodeGen/ItaniumCXXABI.cpp:2584
+      // We're assuming that the destructor function is something we can
+      // reasonably call with the default CC.  Go ahead and cast it to the
+      // right prototype.
----------------
aaron.ballman wrote:
> Xiangling_L wrote:
> > aaron.ballman wrote:
> > > Is this assumption safe though given that there are calling convention 
> > > attributes that can be written on the function?
> > Actually I copied this comment from where linux implemented the dtor 
> > attribute functions. I think it makes sense to make this assumption. 
> > Because when they are used as destructor functions, they actually don't 
> > have any caller from source.
> Ah, the comment confused me because the user could always write something 
> like:
> ```
> [[clang::stdcall, gnu::destructor]] void func();
> ```
> where the destructor function is not something you can call with the default 
> (cdecl) calling convention. Should the comment say "we can reasonably call 
> with the correct CC" instead to avoid this confusion?
Sure, that would make more sense under AIX context.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90892/new/

https://reviews.llvm.org/D90892

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to