[clang] [Clang] strengthen checks for 'main' function to meet [basic.start.main] p2 requirements (PR #101853)

via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 5 02:56:20 PDT 2024


================
@@ -3292,11 +3292,9 @@ bool FunctionDecl::isImmediateFunction() const {
 }
 
 bool FunctionDecl::isMain() const {
-  const TranslationUnitDecl *tunit =
-    dyn_cast<TranslationUnitDecl>(getDeclContext()->getRedeclContext());
-  return tunit &&
-         !tunit->getASTContext().getLangOpts().Freestanding &&
-         isNamed(this, "main");
+  const DeclContext *DC = getDeclContext();
+  return isNamed(this, "main") && !getLangOpts().Freestanding &&
+         (DC->getRedeclContext()->isTranslationUnit() || DC->isLinkageSpec());
----------------
Sirraide wrote:

```suggestion
         (DC->getRedeclContext()->isTranslationUnit() || isExternC());
```

I think this should do the trick. Also please add a test for
```c++
namespace foo { 
    extern "C++" void main() {} 
}
```
which is horrible, but valid.

https://github.com/llvm/llvm-project/pull/101853


More information about the cfe-commits mailing list