Author: Chuanqi Xu Date: 2025-02-21T10:48:30+08:00 New Revision: 24c06a19be7bcf28b37e5eabbe65df95a2c0265a
URL: https://github.com/llvm/llvm-project/commit/24c06a19be7bcf28b37e5eabbe65df95a2c0265a DIFF: https://github.com/llvm/llvm-project/commit/24c06a19be7bcf28b37e5eabbe65df95a2c0265a.diff LOG: [C++20] [Modules] handling selectAny attribute for vardecl Close https://github.com/llvm/llvm-project/issues/127963 The root cause of the problem seems to be that we didn't realize it simply. Added: clang/test/Modules/pr127943.cppm Modified: clang/lib/Sema/SemaDecl.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d95763b22a819..32cc9d33730d5 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4803,7 +4803,8 @@ bool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) { (New->getFormalLinkage() == Linkage::Internal || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || - New->getDeclContext()->isDependentContext())) { + New->getDeclContext()->isDependentContext() || + New->hasAttr<SelectAnyAttr>())) { // The previous definition is hidden, and multiple definitions are // permitted (in separate TUs). Demote this to a declaration. New->demoteThisDefinitionToDeclaration(); diff --git a/clang/test/Modules/pr127943.cppm b/clang/test/Modules/pr127943.cppm new file mode 100644 index 0000000000000..7cc3be6903e6a --- /dev/null +++ b/clang/test/Modules/pr127943.cppm @@ -0,0 +1,31 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/repro.cppm -fdeclspec -emit-module-interface -o %t/repro.pcm +// RUN: %clang_cc1 -std=c++20 %t/source.cpp -fdeclspec -fsyntax-only -verify -fprebuilt-module-path=%t + +//--- repro_decl.hpp +#pragma once + +extern "C" +{ + __declspec(selectany) int foo = 0; +} + +//--- repro.cppm +module; +#include "repro_decl.hpp" + +export module repro; + +export inline int func() +{ + return foo; +} + +//--- source.cpp +// expected-no-diagnostics +import repro; + +#include "repro_decl.hpp" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits