[PATCH] Driver: support detecting driver mode when clang has a version suffix without dash (PR21094)
David Blaikie
dblaikie at gmail.com
Thu Oct 16 14:02:42 PDT 2014
Just some thoughts - mostly quite optional.
================
Comment at: test/Driver/parse-progname.c:1
@@ +1,2 @@
+// REQUIRES: shell, arm-registered-target
+
----------------
Yay tests!
Is "REQUIRES: shell" sufficient to get ln? I would wonder if we'd get a shell on Windows (mingw, perhaps) where symlinks weren't possible - but I guess maybe mingw fakes it somehow.
================
Comment at: tools/driver/driver.cpp:209
@@ +208,3 @@
+ {"clang", nullptr},
+ {"clang++", "--driver-mode=g++"},
+ {"clang-c++", "--driver-mode=g++"},
----------------
possible cleanup: could remove the duplicated "--driver-mode=" from these strings & just build it into the use of these strings instead.
================
Comment at: tools/driver/driver.cpp:222
@@ +221,3 @@
+
+static int FindDriverSuffix(StringRef ProgName) {
+ for (size_t i = 0; i < llvm::array_lengthof(DriverSuffixes); ++i)
----------------
The array itself could be moved inside this function if it returned a const DriverSuffix*, which seems like a nice API for it. (null if not found, presumably)
================
Comment at: tools/driver/driver.cpp:223
@@ +222,3 @@
+static int FindDriverSuffix(StringRef ProgName) {
+ for (size_t i = 0; i < llvm::array_lengthof(DriverSuffixes); ++i)
+ if (ProgName.endswith(DriverSuffixes[i].Suffix))
----------------
I still rather like my std::find_if (& it'd be simpler once the struct had a name), but I get that it's not everyone's cup of tea.
================
Comment at: tools/driver/driver.cpp:239
@@ -236,2 +238,3 @@
+
std::string ProgName(llvm::sys::path::stem(ArgVector[0]));
#ifdef LLVM_ON_WIN32
----------------
Prefer copy/move initialization over direct initialization (makes it clear to the reader that no explicit conversions are happening here)?
================
Comment at: tools/driver/driver.cpp:245
@@ -242,1 +244,3 @@
+
StringRef ProgNameRef(ProgName);
+ int SuffixIndex = FindDriverSuffix(ProgNameRef);
----------------
Prefer copy/move initialization over direct initialization (makes it clear to the reader that no explicit conversions are happening here)?
================
Comment at: tools/driver/driver.cpp:249
@@ +248,3 @@
+ if (SuffixIndex == -1) {
+ // Try again after stripping any trailing version number.
+ while (!ProgNameRef.empty() &&
----------------
this seems like a bit of a special case (& rather repetitious) - could we not just have a single call to FindDriverSuffix search for an arbitrary substring rather than a suffix?
What if someone has clang++-my-branch ? (perhaps not very common, I suppose - but still, a substring search seems simpler and more accepting - would it go wrong somewhere?)
================
Comment at: tools/driver/driver.cpp:284
@@ +283,3 @@
+ const char *arr[] = { "-target", GetStableCStr(SavedStrings, Prefix) };
+ ArgVector.insert(it, arr, arr + 2);
+ }
----------------
Hardcoding the size of the array (while obvious in the previous line) isn't ideal - the begin/end formulation I committed or the prior array_lengthof use, seem preferable.
http://reviews.llvm.org/D5833
More information about the cfe-commits
mailing list