Skip to content

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