[PATCH] D74166: [AIX][Frontend] Static init implementation for AIX considering no priority

Hubert Tong via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 11 20:20:51 PDT 2020


hubert.reinterpretcast added inline comments.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:293
+CodeGenFunction::unregisterGlobalDtorWithUnAtExit(llvm::Function *dtorStub) {
+  // extern "C" int unatexit(void (*f)(void));
+  assert(dtorStub->getFunctionType() ==
----------------
Please add a comment explaining the meaning of the zero and non-zero return values.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:603
   if (!PrioritizedCXXGlobalInits.empty()) {
+    assert(!UseSinitAndSterm && "Prioritized Sinit and Sterm functions are not"
+                                " supported yet.");
----------------
I don't think we should capitalize "sinit" and "sterm" in comments. Indeed, there's a comment below where they are not capitalized.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:639
+  if (CXXGlobalInits.empty())
+    return;
 
----------------
Can this part be committed in a separate patch? It does not appear to have dependencies on other parts of this patch and has the appearance of being a possible change for other platforms.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:641
 
-  for (size_t i = 0; i < FileName.size(); ++i) {
-    // Replace everything that's not [a-zA-Z0-9._] with a _. This set happens
-    // to be the set of C preprocessing numbers.
-    if (!isPreprocessingNumberBody(FileName[i]))
-      FileName[i] = '_';
-  }
+  // Include the filename in the symbol name. When not using sinit and sterm
+  // functions, including "sub_" matches gcc and makes sure these symbols
----------------
The first sentence does not apply unconditionally in the status quo of this patch. Perhaps keep the original comment completely with something like:
```
// When not using sinit and sterm functions:
// ...
```


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:682
 void CodeGenModule::EmitCXXGlobalDtorFunc() {
   if (CXXGlobalDtors.empty())
     return;
----------------
Following from my previous comments on `CXXGlobalDtors`, I am not convinced that `__sterm` functions match the role.


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:704
   AddGlobalDtor(Fn);
+  CXXGlobalDtors.clear();
 }
----------------
If this is another drive-by fix, can we put it in a separate patch?


================
Comment at: clang/lib/CodeGen/CGDeclCXX.cpp:817
       std::tie(CalleeTy, Callee, Arg) = DtorsAndObjects[e - i - 1];
-      llvm::CallInst *CI = Builder.CreateCall(CalleeTy, Callee, Arg);
+      llvm::CallInst *CI = (Arg == nullptr)
+                               ? Builder.CreateCall(CalleeTy, Callee)
----------------
This change would not belong in this function if its scope remains the generation of a "GlobalDtorsFunc" (based on my understanding of the latter).


================
Comment at: clang/lib/CodeGen/ItaniumCXXABI.cpp:4445
+  if (D.getTLSKind() != VarDecl::TLS_None)
+    llvm::report_fatal_error("thread local storage unimplemented on AIX yet");
+
----------------
s/unimplemented on AIX yet/not yet implemented on AIX/;


================
Comment at: clang/lib/CodeGen/ItaniumCXXABI.cpp:4467
+
+  // Create a variable destruction function.
+  const CGFunctionInfo &FI = CGM.getTypes().arrangeNullaryFunction();
----------------
Suggestion:
Create the finalization action associated with a variable.


================
Comment at: clang/lib/CodeGen/ItaniumCXXABI.cpp:4480
+
+  llvm::Value *NeedsDestruct = CGF.Builder.CreateIsNull(V, "guard.hasDtor");
+
----------------
I don't think this is a real "guard variable". I think the comments need to explain this (including scare quotes for "guard variable".


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

https://reviews.llvm.org/D74166





More information about the cfe-commits mailing list