rsmith added inline comments.

================
Comment at: include/clang/Driver/Options.td:1102
@@ -1101,1 +1101,3 @@
 def Wlarge_by_value_copy_EQ : Joined<["-"], "Wlarge-by-value-copy=">, 
Flags<[CC1Option]>;
+def fubsan_strip_path_components_EQ : Joined<["-"], 
"fubsan-strip-path-components=">,
+  Group<f_clang_Group>, Flags<[CC1Option]>, MetaVarName<"<number>">,
----------------
This should be spelled `-fsanitize-undefined-strip-path-components=` or similar 
to match the other `-fsanitize-...` options.

================
Comment at: lib/CodeGen/CGExpr.cpp:2400-2402
@@ -2371,1 +2399,5 @@
+
+    // We're calling .data() to get the full string from this component 
onwards.
+    // Not just the current component.
+    auto FilenameGV = CGM.GetAddrOfConstantCString(FilenameString.data(), 
".src");
     CGM.getSanitizerMetadata()->disableSanitizerForGlobal(
----------------
This is a fragile way to compute the resulting string: you're relying on 
`PLoc.getFilename()` returning a nul-terminated string; this code would fail if 
`PLoc.getFilename()` started (very reasonably) returning a `StringRef`. Also, 
`*I` on a path iterator doesn't necessarily produce a `StringRef` whose 
contents are taken from the path being iterated (particularly for paths ending 
in a `/`, which can't happen here, but there seem to be no guarantees that this 
doesn't happen in other cases too).

In the forward iteration case, you can use `FilenameString.substr(I - 
path::begin(FilenameString))` to get a correct `StringRef` denoting the 
relevant piece of the path. The path reverse iterators don't have an 
`operator-` but one could presumably be added.


http://reviews.llvm.org/D19666



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to