[cfe-dev] case-insensitive #include warning

Nico Weber via cfe-dev cfe-dev at lists.llvm.org
Mon Apr 11 18:01:53 PDT 2016

On Mon, Apr 11, 2016 at 7:45 PM, Eric Niebler via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> On 4/11/16, 4:12 PM, "Jason Haslam" <jason.haslam at gmail.com> wrote:
> On Apr 7, 2016, at 5:44 PM, Eric Niebler via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
> On 4/7/16, 11:37 AM, "clattner at apple.com on behalf of Chris Lattner" <
> clattner at apple.com> wrote:
> On Apr 5, 2016, at 4:03 PM, Eric Niebler via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
> Hi all,
> I have an initial cut at patch that issues a warning when a file is
> #included on a case-insensitive file system that would not be found on a
> case-sensitive system. Is there interest?
> Since this is a hard problem to solve perfectly, I have opted for a
> strategy that is efficient and conservative about issuing diagnostics. That
> is, it shouldn't give false positives, but it will fail to diagnose some
> non-portable paths. On *nix systems, the low-level APIs that stat and open
> files get an extra call to ::realpath, and the result is cached along with
> the rest of the file metadata. […]
> I was working on a similar patch a few years ago (
> http://lists.llvm.org/pipermail/cfe-dev/2012-July/023090.html
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_pipermail_cfe-2Ddev_2012-2DJuly_023090.html&d=CwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=t4UJXwtMcIwGvgOaMqGzrQ&m=c8D9-z1QyfRWobwgBlnojB0yAu4P3Ve2-Wk9Z4vAxjg&s=5yrhYcvssUCiHzENOa2jFtUbhJNW1jTrGLKAnlJLkuQ&e=> is
> the start of a very long thread). Does realpath really give the real case
> on unix? My understanding is that it doesn’t. I had to resort to reading
> the directory listings and comparing entries. And of course readdir is even
> slower. I could only ever get decent performance by aggressively caching
> the directory listings. In the end it got too complicated and wasn’t
> entirely convinced that performance would ever be good enough to warrant
> the addition. I was mostly interested in Mac though. Maybe it’s a different
> story on Windows.
> I haven't been able to successfully mount a case-insensitive file system
> on my Linux VM,

This should do it:

  fallocate -l 3g mydisk
  mkfs.vfat mydisk
  mkdir mountdir
  sudo mount mydisk mountdir

> so I haven't specifically tested this. On Mac, realpath gets the case
> right, but it's not needed since it has fcntl/F_GETPATH, which I've
> discovered is faster. In my tests, realpath does not get the right case
> on Cygwin. On *nixes that have /proc, it's possible to readlink on
> /proc/self/fd/$FD once the file is opened, and that *should* give the
> properly cased filename. I haven't done extensive benchmarking, but that is
> certain to be faster than recursive directory traversal. But not all *nixes
> have /proc.
> TL;DR this is going to be an unreliable warning. Personally, I think
> that's fine so long as it doesn't give false positives and doesn't slow
> things down too badly. I'm busy reworking the patch to that end.
> \e
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160411/29cd5700/attachment.html>

More information about the cfe-dev mailing list