Skip to content

[clang] implement common-sugar for adjusted member-pointers #133613

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 30, 2025

Conversation

mizvekov
Copy link
Contributor

This implements a missing case for an adjusted member-pointer in getCommonSugaredType, when that was originally implemented here: #130537

This missing case could otherwise cause a crash, so this is a regression fix.

This should fix the crash reported here: #132401 (comment)

No release notes, since this regression and its underlying feature were never released.

This implements a missing case for an adjusted member-pointer
in getCommonSugaredType, when that was originally implemented
here: #130537

This missing case could otherwise cause a crash, so this is a
regression fix.

This should fix the crash reported here: #132401 (comment)

No release notes, since this regression and the underlying feature
were never released.
@mizvekov mizvekov self-assigned this Mar 30, 2025
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels Mar 30, 2025
@llvmbot
Copy link
Member

llvmbot commented Mar 30, 2025

@llvm/pr-subscribers-clang

Author: Matheus Izvekov (mizvekov)

Changes

This implements a missing case for an adjusted member-pointer in getCommonSugaredType, when that was originally implemented here: #130537

This missing case could otherwise cause a crash, so this is a regression fix.

This should fix the crash reported here: #132401 (comment)

No release notes, since this regression and its underlying feature were never released.


Full diff: https://github.com/llvm/llvm-project/pull/133613.diff

2 Files Affected:

  • (modified) clang/lib/AST/ASTContext.cpp (+9-1)
  • (modified) clang/test/SemaCXX/sugar-common-types.cpp (+16)
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index c9d1bea4c623a..2d9480ebcf00c 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -14135,7 +14135,6 @@ static QualType getCommonSugarTypeNode(ASTContext &Ctx, const Type *X,
     CANONICAL_TYPE(IncompleteArray)
     CANONICAL_TYPE(HLSLAttributedResource)
     CANONICAL_TYPE(LValueReference)
-    CANONICAL_TYPE(MemberPointer)
     CANONICAL_TYPE(ObjCInterface)
     CANONICAL_TYPE(ObjCObject)
     CANONICAL_TYPE(ObjCObjectPointer)
@@ -14313,6 +14312,15 @@ static QualType getCommonSugarTypeNode(ASTContext &Ctx, const Type *X,
       return QualType();
     return Ctx.getUsingType(CD, Ctx.getQualifiedType(Underlying));
   }
+  case Type::MemberPointer: {
+    const auto *PX = cast<MemberPointerType>(X),
+               *PY = cast<MemberPointerType>(Y);
+    CXXRecordDecl *Cls = PX->getMostRecentCXXRecordDecl();
+    assert(Cls == PY->getMostRecentCXXRecordDecl());
+    return Ctx.getMemberPointerType(
+        ::getCommonPointeeType(Ctx, PX, PY),
+        ::getCommonQualifier(Ctx, PX, PY, /*IsSame=*/false), Cls);
+  }
   case Type::CountAttributed: {
     const auto *DX = cast<CountAttributedType>(X),
                *DY = cast<CountAttributedType>(Y);
diff --git a/clang/test/SemaCXX/sugar-common-types.cpp b/clang/test/SemaCXX/sugar-common-types.cpp
index a21032517b2ba..d58f6cdd900fc 100644
--- a/clang/test/SemaCXX/sugar-common-types.cpp
+++ b/clang/test/SemaCXX/sugar-common-types.cpp
@@ -186,3 +186,19 @@ namespace arrays {
     // expected-error@-1 {{lvalue of type 'const volatile volatile B1[1]' (aka 'const volatile volatile int[1]')}}
   } // namespace balanced_qualifiers
 } // namespace arrays
+
+namespace member_pointers {
+  template <class T> struct W {
+    X1 a;
+    Y1 b;
+  };
+  struct W1 : W<X2> {};
+  struct W2 : W<Y2> {};
+
+  N t1 = 0 ? &W<X2>::a : &W<Y2>::b;
+  // expected-error@-1 {{rvalue of type 'B1 W<B2>::*'}}
+
+  // FIXME: adjusted MemberPointer does not preserve qualifier
+  N t3 = 0 ? &W1::a : &W2::b;
+  // expected-error@-1 {{rvalue of type 'B1 W<void>::*'}}
+} // namespace member_pointers

@mizvekov mizvekov merged commit 976a384 into main Mar 30, 2025
14 checks passed
@mizvekov mizvekov deleted the users/mizvekov/member-pointer-common-sugar branch March 30, 2025 04:45
@llvm-ci
Copy link
Collaborator

llvm-ci commented Mar 30, 2025

LLVM Buildbot has detected a new failure on builder clang-aarch64-sve-vls running on linaro-g3-03 while building clang at step 7 "ninja check 1".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/143/builds/6546

Here is the relevant piece of the build log for the reference
Step 7 (ninja check 1) failure: stage 1 checked (failure)
...
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using ld64.lld: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/ld64.lld
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using wasm-ld: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/wasm-ld
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/runtimes/runtimes-bins/compiler-rt/test/interception/Unit' contained no tests
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/Unit' contained no tests
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using ld.lld: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/ld.lld
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using lld-link: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/lld-link
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using ld64.lld: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/ld64.lld
llvm-lit: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/llvm/llvm/utils/lit/lit/llvm/config.py:520: note: using wasm-ld: /home/tcwg-buildbot/worker/clang-aarch64-sve-vls/stage1/bin/wasm-ld
-- Testing: 97483 tests, 64 workers --
UNRESOLVED: Flang :: Driver/slp-vectorize.ll (1 of 97483)
******************** TEST 'Flang :: Driver/slp-vectorize.ll' FAILED ********************
Test has no 'RUN:' line
********************
PASS: Clang :: Driver/x86-target-features.c (2 of 97483)
PASS: ScudoStandalone-Unit :: ./ScudoUnitTest-aarch64-Test/53/71 (3 of 97483)
PASS: ThreadSanitizer-aarch64 :: signal_thread.cpp (4 of 97483)
PASS: Clang :: OpenMP/target_parallel_codegen_registration.cpp (5 of 97483)
PASS: Clang :: OpenMP/target_simd_codegen_registration.cpp (6 of 97483)
PASS: MemorySanitizer-AARCH64 :: release_origin.c (7 of 97483)
PASS: Clang :: Headers/arm-neon-header.c (8 of 97483)
PASS: HWAddressSanitizer-aarch64 :: TestCases/Linux/create-thread-stress.cpp (9 of 97483)
PASS: lld :: COFF/arm64ec-import-range-ext.test (10 of 97483)
PASS: libFuzzer-aarch64-default-Linux :: merge-sigusr.test (11 of 97483)
PASS: Clang :: Analysis/runtime-regression.c (12 of 97483)
PASS: libFuzzer-aarch64-default-Linux :: large.test (13 of 97483)
PASS: UBSan-ThreadSanitizer-aarch64 :: TestCases/ImplicitConversion/signed-integer-truncation-ignorelist.c (14 of 97483)
PASS: Clang :: CodeGen/X86/sse2-builtins.c (15 of 97483)
PASS: libFuzzer-aarch64-default-Linux :: msan.test (16 of 97483)
PASS: Clang :: OpenMP/target_parallel_for_codegen_registration.cpp (17 of 97483)
PASS: libFuzzer-aarch64-default-Linux :: value-profile-cmp.test (18 of 97483)
PASS: UBSan-ThreadSanitizer-aarch64 :: TestCases/ImplicitConversion/unsigned-integer-truncation-ignorelist.c (19 of 97483)
PASS: Clang :: OpenMP/target_teams_distribute_codegen_registration.cpp (20 of 97483)
PASS: Clang :: OpenMP/target_teams_distribute_simd_codegen_registration.cpp (21 of 97483)
PASS: Clang :: Driver/linux-ld.c (22 of 97483)
PASS: Clang :: OpenMP/target_parallel_for_simd_codegen_registration.cpp (23 of 97483)
PASS: LLVM :: CodeGen/RISCV/attributes.ll (24 of 97483)
PASS: Clang :: CodeGen/X86/rot-intrinsics.c (25 of 97483)
PASS: Clang :: Preprocessor/predefined-arch-macros.c (26 of 97483)
PASS: Clang :: CodeGen/X86/avx-builtins.c (27 of 97483)
PASS: Clang :: CodeGen/AArch64/sve-intrinsics/acle_sve_reinterpret-bfloat.c (28 of 97483)
PASS: ThreadSanitizer-aarch64 :: deadlock_detector_stress_test.cpp (29 of 97483)
PASS: LLVM :: CodeGen/AMDGPU/sched-group-barrier-pipeline-solver.mir (30 of 97483)
PASS: SanitizerCommon-lsan-aarch64-Linux :: Linux/signal_segv_handler.cpp (31 of 97483)
PASS: SanitizerCommon-ubsan-aarch64-Linux :: Linux/signal_segv_handler.cpp (32 of 97483)
PASS: Clang :: OpenMP/target_teams_distribute_parallel_for_simd_codegen_registration.cpp (33 of 97483)
PASS: SanitizerCommon-hwasan-aarch64-Linux :: Linux/signal_segv_handler.cpp (34 of 97483)
PASS: SanitizerCommon-msan-aarch64-Linux :: Linux/signal_segv_handler.cpp (35 of 97483)
PASS: SanitizerCommon-tsan-aarch64-Linux :: Linux/signal_segv_handler.cpp (36 of 97483)
PASS: Clang :: Driver/clang_f_opts.c (37 of 97483)

@llvm-ci
Copy link
Collaborator

llvm-ci commented Mar 30, 2025

LLVM Buildbot has detected a new failure on builder clang-aarch64-sve-vls-2stage running on linaro-g3-02 while building clang at step 12 "ninja check 2".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/4/builds/5936

Here is the relevant piece of the build log for the reference
Step 12 (ninja check 2) failure: stage 2 checked (failure)
...
PASS: Flang :: Driver/misc-flags.f90 (25170 of 97483)
PASS: Flang :: Driver/predefined-macros-x86.f90 (25171 of 97483)
PASS: Flang :: Driver/mabi-riscv.f90 (25172 of 97483)
PASS: Flang :: Driver/print-resource-dir.F90 (25173 of 97483)
PASS: DataFlowSanitizer-aarch64 :: origin_ldst.c (25174 of 97483)
PASS: DataFlowSanitizer-aarch64 :: pair.cpp (25175 of 97483)
PASS: Flang :: Driver/input-output-file.f90 (25176 of 97483)
PASS: Flang :: Driver/implicit-none.f90 (25177 of 97483)
PASS: Flang :: Driver/parse-fir-error.ll (25178 of 97483)
UNRESOLVED: Flang :: Driver/slp-vectorize.ll (25179 of 97483)
******************** TEST 'Flang :: Driver/slp-vectorize.ll' FAILED ********************
Test has no 'RUN:' line
********************
PASS: Flang :: Driver/override-triple.ll (25180 of 97483)
PASS: Flang :: Driver/parse-ir-error.f95 (25181 of 97483)
PASS: Flang :: Driver/predefined-macros-compiler-version.F90 (25182 of 97483)
PASS: Flang :: Driver/mlir-pass-pipeline.f90 (25183 of 97483)
PASS: Clangd Unit Tests :: ./ClangdTests/70/81 (25184 of 97483)
PASS: Flang :: Driver/macro-def-undef.F90 (25185 of 97483)
PASS: Flang :: Driver/lto-bc.f90 (25186 of 97483)
PASS: Flang :: Driver/phases.f90 (25187 of 97483)
PASS: Flang :: Driver/print-pipeline-passes.f90 (25188 of 97483)
PASS: Flang :: Driver/print-target-triple.f90 (25189 of 97483)
PASS: Flang :: Driver/mlink-builtin-bc.f90 (25190 of 97483)
PASS: Flang :: Driver/scanning-error.f95 (25191 of 97483)
PASS: Flang :: Driver/std2018-wrong.f90 (25192 of 97483)
PASS: Flang :: Driver/include-header.f90 (25193 of 97483)
PASS: Flang :: Driver/mllvm.f90 (25194 of 97483)
PASS: Flang :: Driver/supported-suffices/f03-suffix.f03 (25195 of 97483)
PASS: Flang :: Driver/pthread.f90 (25196 of 97483)
PASS: Flang :: Driver/supported-suffices/f08-suffix.f08 (25197 of 97483)
PASS: Clangd Unit Tests :: ./ClangdTests/80/81 (25198 of 97483)
PASS: Flang :: Driver/tco-code-gen-llvm.fir (25199 of 97483)
PASS: Flang :: Driver/parse-error.ll (25200 of 97483)
PASS: Flang :: Driver/q-unused-arguments.f90 (25201 of 97483)
PASS: Flang :: Driver/target.f90 (25202 of 97483)
PASS: Flang :: Driver/pass-plugin-not-found.f90 (25203 of 97483)
PASS: Flang :: Driver/pp-fixed-form.f90 (25204 of 97483)
PASS: Flang :: Driver/target-gpu-features.f90 (25205 of 97483)
PASS: Flang :: Driver/missing-arg.f90 (25206 of 97483)
PASS: Flang :: Driver/bbc-openmp-version-macro.f90 (25207 of 97483)
PASS: Flang :: Driver/no-duplicate-main.f90 (25208 of 97483)
PASS: Flang :: Driver/linker-flags.f90 (25209 of 97483)
PASS: Flang :: Driver/unsupported-vscale-max-min.f90 (25210 of 97483)
PASS: Flang :: Driver/optimization-remark-invalid.f90 (25211 of 97483)
PASS: Flang :: Driver/unparse-with-modules.f90 (25212 of 97483)
PASS: Flang :: Driver/multiple-input-files.f90 (25213 of 97483)
PASS: Flang :: Driver/optimization-remark-backend.f90 (25214 of 97483)
PASS: Flang :: Driver/save-temps.f90 (25215 of 97483)

SchrodingerZhu pushed a commit to SchrodingerZhu/llvm-project that referenced this pull request Mar 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants