[PATCH] Fix to PR5683 - issue diagnostic for pointer subtraction with type of size zero.

Richard Smith richard at metafoo.co.uk
Sun Apr 7 19:18:43 PDT 2013



================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:4246-4248
@@ -4245,2 +4245,5 @@
   "pointers to incompatible types}0,1">;
+def err_sub_ptr_zero_size_types : Error<
+  "subtraction of pointers to types of zero length (%diff{$ and $)|}0,1 "
+  "is not allowed">;
 def ext_typecheck_ordered_comparison_of_pointer_integer : ExtWarn<
----------------
This should be a warning, not an error. GCC accepts this code.

================
Comment at: lib/Sema/SemaExpr.cpp:6733
@@ +6732,3 @@
+        // If pointee type is a structure or union of zero size (GCC extension),
+        // the subtraction does not have a sense.
+        CharUnits ElementSize = Context.getTypeSizeInChars(rpointee);
----------------
... does not *make* sense.

================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:4247
@@ +4246,3 @@
+def err_sub_ptr_zero_size_types : Error<
+  "subtraction of pointers to types of zero length (%diff{$ and $)|}0,1 "
+  "is not allowed">;
----------------
The pointee types must be the same modulo cv-qualifiers (which are irrelevant), so there's no point naming both types. How about "subtraction of pointers to type %0 with zero size has undefined behavior"?


http://llvm-reviews.chandlerc.com/D637



More information about the cfe-commits mailing list