r218895 - Diagnose mixed use of '_' and '.' as version

Fariborz Jahanian fjahanian at apple.com
Thu Oct 2 10:57:26 PDT 2014


Author: fjahanian
Date: Thu Oct  2 12:57:26 2014
New Revision: 218895

URL: http://llvm.org/viewvc/llvm-project?rev=218895&view=rev
Log:
Diagnose mixed use of '_' and '.' as version
separators in my previous patch. 

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
    cfe/trunk/lib/Parse/ParseDecl.cpp
    cfe/trunk/test/SemaObjC/attr-availability-1.m

Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=218895&r1=218894&r2=218895&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Thu Oct  2 12:57:26 2014
@@ -775,6 +775,9 @@ def err_lambda_missing_parens : Error<
 // Availability attribute
 def err_expected_version : Error<
   "expected a version of the form 'major[.minor[.subminor]]'">;
+def warn_expected_consistent_version_separator : Warning<
+  "use same version number separators '_' or '.'; as in "
+  "'major[.minor[.subminor]]'">, InGroup<Availability>;
 def err_zero_version : Error<
   "version number must have non-zero major, minor, or sub-minor version">;
 def err_availability_expected_platform : Error<

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=218895&r1=218894&r2=218895&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Thu Oct  2 12:57:26 2014
@@ -688,7 +688,8 @@ VersionTuple Parser::ParseVersionTuple(S
     return VersionTuple(Major);
   }
 
-  if (!VersionNumberSeparator(ThisTokBegin[AfterMajor])
+  const char AfterMajorSeparator = ThisTokBegin[AfterMajor];
+  if (!VersionNumberSeparator(AfterMajorSeparator)
       || (AfterMajor + 1 == ActualLength)) {
     Diag(Tok, diag::err_expected_version);
     SkipUntil(tok::comma, tok::r_paren,
@@ -716,13 +717,17 @@ VersionTuple Parser::ParseVersionTuple(S
     return VersionTuple(Major, Minor);
   }
 
+  const char AfterMinorSeparator = ThisTokBegin[AfterMinor];
   // If what follows is not a '.' or '_', we have a problem.
-  if (!VersionNumberSeparator(ThisTokBegin[AfterMinor])) {
+  if (!VersionNumberSeparator(AfterMinorSeparator)) {
     Diag(Tok, diag::err_expected_version);
     SkipUntil(tok::comma, tok::r_paren,
               StopAtSemi | StopBeforeMatch | StopAtCodeCompletion);
     return VersionTuple();
   }
+  
+  if (AfterMajorSeparator != AfterMinorSeparator)
+    Diag(Tok, diag::warn_expected_consistent_version_separator);
 
   // Parse the subminor version.
   unsigned AfterSubminor = AfterMinor + 1;

Modified: cfe/trunk/test/SemaObjC/attr-availability-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-availability-1.m?rev=218895&r1=218894&r2=218895&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/attr-availability-1.m (original)
+++ cfe/trunk/test/SemaObjC/attr-availability-1.m Thu Oct  2 12:57:26 2014
@@ -90,3 +90,8 @@ id NSNibOwner, topNibObjects;
 }
 
 @end
+
+ at interface Mixed
+- (void)Meth1 __attribute__((availability(macosx,introduced=10.3_0))); // expected-warning {{use same version number separators '_' or '.'}}
+- (void)Meth2 __attribute__((availability(macosx,introduced=10_3.1))); // expected-warning {{use same version number separators '_' or '.'}}
+ at end





More information about the cfe-commits mailing list