summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/VersionTuple.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-03-22 08:39:22 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-03-22 08:39:22 +0000
commitc371ff048df8731052976f4e628ed1861cf61cfd (patch)
tree0f88276ac2f3a25c058e0cdd0471c2a5ac6501fa /clang/lib/Basic/VersionTuple.cpp
parenta3ea9a4e09ad7339022cff87fe90ed7f9e53f8e3 (diff)
downloadbcm5719-llvm-c371ff048df8731052976f4e628ed1861cf61cfd.tar.gz
bcm5719-llvm-c371ff048df8731052976f4e628ed1861cf61cfd.zip
MS ABI: Implement driver-level support for thread-safe statics
Decide whether or not to use thread-safe statics depending on whether or not we have an explicit request from the driver. If we don't have an explicit request, infer which behavior to use depending on the compatibility version we are targeting. N.B. CodeGen support is still ongoing. llvm-svn: 232906
Diffstat (limited to 'clang/lib/Basic/VersionTuple.cpp')
-rw-r--r--clang/lib/Basic/VersionTuple.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Basic/VersionTuple.cpp b/clang/lib/Basic/VersionTuple.cpp
index aa43ae298e2..9c73fd98a17 100644
--- a/clang/lib/Basic/VersionTuple.cpp
+++ b/clang/lib/Basic/VersionTuple.cpp
@@ -32,6 +32,8 @@ raw_ostream& clang::operator<<(raw_ostream &Out,
Out << (V.usesUnderscores() ? '_' : '.') << *Minor;
if (Optional<unsigned> Subminor = V.getSubminor())
Out << (V.usesUnderscores() ? '_' : '.') << *Subminor;
+ if (Optional<unsigned> Build = V.getBuild())
+ Out << (V.usesUnderscores() ? '_' : '.') << *Build;
return Out;
}
@@ -55,7 +57,7 @@ static bool parseInt(StringRef &input, unsigned &value) {
}
bool VersionTuple::tryParse(StringRef input) {
- unsigned major = 0, minor = 0, micro = 0;
+ unsigned major = 0, minor = 0, micro = 0, build = 0;
// Parse the major version, [0-9]+
if (parseInt(input, major)) return true;
@@ -80,9 +82,19 @@ bool VersionTuple::tryParse(StringRef input) {
input = input.substr(1);
if (parseInt(input, micro)) return true;
+ if (input.empty()) {
+ *this = VersionTuple(major, minor, micro);
+ return false;
+ }
+
+ // If we're not done, parse the micro version, \.[0-9]+
+ if (input[0] != '.') return true;
+ input = input.substr(1);
+ if (parseInt(input, build)) return true;
+
// If we have characters left over, it's an error.
if (!input.empty()) return true;
- *this = VersionTuple(major, minor, micro);
+ *this = VersionTuple(major, minor, micro, build);
return false;
}
OpenPOWER on IntegriCloud