Skip to content

Conversation

@AaronBallman
Copy link
Collaborator

This paper was ensuring that the left operand of . and -> must be a complete object type. This has always been required in every version of Clang.

This paper was ensuring that the left operand of . and -> must be a
complete object type. This has always been required in every version of
Clang.
@AaronBallman AaronBallman added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" c2y labels Oct 9, 2025
@llvmbot
Copy link
Member

llvmbot commented Oct 9, 2025

@llvm/pr-subscribers-clang

Author: Aaron Ballman (AaronBallman)

Changes

This paper was ensuring that the left operand of . and -> must be a complete object type. This has always been required in every version of Clang.


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

2 Files Affected:

  • (added) clang/test/C/C2y/n3532.c (+53)
  • (modified) clang/www/c_status.html (+1-1)
diff --git a/clang/test/C/C2y/n3532.c b/clang/test/C/C2y/n3532.c
new file mode 100644
index 0000000000000..c481b58ba7d90
--- /dev/null
+++ b/clang/test/C/C2y/n3532.c
@@ -0,0 +1,53 @@
+// RUN: %clang_cc1 -verify -std=c2y %s
+// RUN: %clang_cc1 -verify -std=c23 %s
+// RUN: %clang_cc1 -verify -std=c17 %s
+// RUN: %clang_cc1 -verify -std=c11 %s
+// RUN: %clang_cc1 -verify -std=c99 %s
+// RUN: %clang_cc1 -verify -std=c89 %s
+
+/* WG14 N3532: Yes
+ * Member access of an incomplete object
+ *
+ * Verify that the first operand to the . or -> operators is a complete object
+ * type.
+ */
+
+struct S {
+  int i;
+};
+
+union U {
+  int i;
+};
+
+void good_test(void) {
+  struct S s;
+  struct S *s_ptr = &s;
+  union U u;
+  union U *u_ptr = &u;
+
+  // Complete object type, correctly named member.
+  s.i = 10;
+  s_ptr->i = 10;
+  u.i = 10;
+  u_ptr->i = 10;
+}
+
+void bad_test(void) {
+  struct Incomplete *s_ptr;    /* expected-note 2 {{forward declaration of 'struct Incomplete'}} */
+  union AlsoIncomplete *u_ptr; /* expected-note 2 {{forward declaration of 'union AlsoIncomplete'}} */
+  struct S s;
+  union U u;
+
+  // Incomplete object type.
+  s_ptr->i = 10; /* expected-error {{incomplete definition of type 'struct Incomplete'}} */
+  u_ptr->i = 10; /* expected-error {{incomplete definition of type 'union AlsoIncomplete'}} */
+
+  (*s_ptr).i = 10; /* expected-error {{incomplete definition of type 'struct Incomplete'}} */
+  (*u_ptr).i = 10; /* expected-error {{incomplete definition of type 'union AlsoIncomplete'}} */
+
+  // Complete object type, no named member.
+  s.f = "test"; /* expected-error {{no member named 'f' in 'struct S'}} */
+  u.f = "test"; /* expected-error {{no member named 'f' in 'union U'}} */
+}
+
diff --git a/clang/www/c_status.html b/clang/www/c_status.html
index 380f66495a367..1a5fa4bbda3dc 100644
--- a/clang/www/c_status.html
+++ b/clang/www/c_status.html
@@ -359,7 +359,7 @@ <h2 id="c2y">C2y implementation status</h2>
     <tr>
       <td>Member access of an incomplete object</td>
       <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3532.pdf">N3532</a></td>
-      <td class="unknown" align="center">Unknown</td>
+      <td class="full" align="center">Yes</td>
 	</tr>
     <tr>
       <td>Representation of Pointers and nullptr_t</td>

@AaronBallman AaronBallman merged commit 80f48b8 into llvm:main Oct 10, 2025
13 checks passed
@AaronBallman AaronBallman deleted the aballman-wg14-n3532 branch October 10, 2025 11:34
DharuniRAcharya pushed a commit to DharuniRAcharya/llvm-project that referenced this pull request Oct 13, 2025
This paper was ensuring that the left operand of . and -> must be a
complete object type. This has always been required in every version of
Clang.
akadutta pushed a commit to akadutta/llvm-project that referenced this pull request Oct 14, 2025
This paper was ensuring that the left operand of . and -> must be a
complete object type. This has always been required in every version of
Clang.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c2y 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.

2 participants