<div dir="ltr">Done.<div><br></div><div>David</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 21, 2016 at 7:06 AM, Bernard Ogden <span dir="ltr"><<a href="mailto:Bernard.Ogden@arm.com" target="_blank">Bernard.Ogden@arm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello David,<br>
<br>
I'm seeing this patch fail Windows builds like this:<br>
llvm\tools\llvm-profdata\llvm-profdata.cpp(117): error C2797: 'WeightedFile::Filename': list initialization inside member initializer list or non-static data member initializer is not implemented<br>
<br>
I'm using Visual Studio 2013, which I think is the minimum supported compiler. IIUC this feature is not supported even in VS 2015:<br>
<a href="https://msdn.microsoft.com/en-gb/library/Dn793970.aspx" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-gb/library/Dn793970.aspx</a><br>
<br>
Could you apply one of the workarounds on the MSDN page?<br>
<br>
Thanks,<br>
<br>
Bernie<br>
<br>
<br>
On 20 Jul 2016, at 23:24, Xinliang David Li via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
<br>
> Author: davidxl<br>
> Date: Wed Jul 20 17:24:52 2016<br>
> New Revision: 276197<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=276197&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=276197&view=rev</a><br>
> Log:<br>
> Reapply r276185<br>
><br>
> Fix the test case that should not depend on dir iteration order.<br>
><br>
><br>
><br>
> Added:<br>
>    llvm/trunk/test/tools/llvm-profdata/input-dir.test<br>
> Modified:<br>
>    llvm/trunk/test/tools/llvm-profdata/input-filenames.test<br>
>    llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp<br>
><br>
> Added: llvm/trunk/test/tools/llvm-profdata/input-dir.test<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/input-dir.test?rev=276197&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/input-dir.test?rev=276197&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/llvm-profdata/input-dir.test (added)<br>
> +++ llvm/trunk/test/tools/llvm-profdata/input-dir.test Wed Jul 20 17:24:52 2016<br>
> @@ -0,0 +1,22 @@<br>
> +# Create an input file.<br>
> +RUN: echo "#" > %t.input<br>
> +RUN: echo "%t.dir1" >> %t.input<br>
> +RUN: echo "2,%t.dir2" >> %t.input<br>
> +<br>
> +RUN: mkdir -p %t.dir1<br>
> +RUN: mkdir -p %t.dir2/subdir<br>
> +<br>
> +RUN: echo ' ' > %t.dir1/bar<br>
> +RUN: echo ' ' > %t.dir1/foo<br>
> +RUN: echo ' ' > %t.dir2/bar<br>
> +RUN: echo ' ' > %t.dir2/foo<br>
> +RUN: echo ' ' > %t.dir2/subdir/baz<br>
> +<br>
> +RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null | FileCheck %s<br>
> +RUN: llvm-profdata merge -weighted-input=2,%t.dir2 -dump-input-file-list -o /dev/null %t.dir1 | FileCheck %s<br>
> +<br>
> +CHECK-DAG: 1,{{.*}}.dir1/bar<br>
> +CHECK-DAG: 1,{{.*}}.dir1/foo<br>
> +CHECK-DAG: 2,{{.*}}.dir2/bar<br>
> +CHECK-DAG: 2,{{.*}}.dir2/foo<br>
> +CHECK-DAG: 2,{{.*}}.dir2/subdir/baz<br>
><br>
> Modified: llvm/trunk/test/tools/llvm-profdata/input-filenames.test<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/input-filenames.test?rev=276197&r1=276196&r2=276197&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/input-filenames.test?rev=276197&r1=276196&r2=276197&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/llvm-profdata/input-filenames.test (original)<br>
> +++ llvm/trunk/test/tools/llvm-profdata/input-filenames.test Wed Jul 20 17:24:52 2016<br>
> @@ -1,17 +1,19 @@<br>
> # Create an input file.<br>
> RUN: echo '# comment 1' > %t.input<br>
> RUN: echo ' # comment 2' >> %t.input<br>
> -RUN: echo 'bar' >> %t.input<br>
> -RUN: echo ' baz' >> %t.input<br>
> +RUN: echo " %t.bar" >> %t.input<br>
> +RUN: echo " %t.baz" >> %t.input<br>
> RUN: echo "2,%t.weighted" >> %t.input<br>
><br>
> -# Create the weighted file, since these actually need to exist.<br>
> RUN: echo ' ' > %t.weighted<br>
> +RUN: echo ' ' > %t.foo<br>
> +RUN: echo ' ' > %t.bar<br>
> +RUN: echo ' ' > %t.baz<br>
><br>
> -RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null foo | FileCheck %s<br>
> -RUN: llvm-profdata merge -input-files %t.input -dump-input-file-list -o /dev/null foo | FileCheck %s<br>
> +RUN: llvm-profdata merge -f %t.input -dump-input-file-list -o /dev/null %t.foo | FileCheck %s<br>
> +RUN: llvm-profdata merge -input-files %t.input -dump-input-file-list -o /dev/null %t.foo | FileCheck %s<br>
><br>
> -CHECK: 1,foo<br>
> -CHECK-NEXT: 1,bar<br>
> -CHECK-NEXT: 1,baz<br>
> +CHECK: 1,{{.*}}.foo<br>
> +CHECK-NEXT: 1,{{.*}}.bar<br>
> +CHECK-NEXT: 1,{{.*}}.baz<br>
> CHECK-NEXT: 2,{{.*}}.weighted<br>
><br>
> Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=276197&r1=276196&r2=276197&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=276197&r1=276196&r2=276197&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Wed Jul 20 17:24:52 2016<br>
> @@ -109,12 +109,12 @@ static void handleMergeWriterError(Error<br>
> }<br>
><br>
> struct WeightedFile {<br>
> -  StringRef Filename;<br>
> +  std::string Filename;<br>
>   uint64_t Weight;<br>
><br>
>   WeightedFile() {}<br>
><br>
> -  WeightedFile(StringRef F, uint64_t W) : Filename{F}, Weight{W} {}<br>
> +  WeightedFile(const std::string &F, uint64_t W) : Filename{F}, Weight{W} {}<br>
> };<br>
> typedef SmallVector<WeightedFile, 5> WeightedFileVector;<br>
><br>
> @@ -305,10 +305,6 @@ static WeightedFile parseWeightedFile(co<br>
>   if (WeightStr.getAsInteger(10, Weight) || Weight < 1)<br>
>     exitWithError("Input weight must be a positive integer.");<br>
><br>
> -  if (!sys::fs::exists(FileName))<br>
> -    exitWithErrorCode(make_error_code(errc::no_such_file_or_directory),<br>
> -                      FileName);<br>
> -<br>
>   return WeightedFile(FileName, Weight);<br>
> }<br>
><br>
> @@ -324,6 +320,33 @@ getInputFilenamesFileBuf(const StringRef<br>
>   return std::move(*BufOrError);<br>
> }<br>
><br>
> +static void addWeightedInput(WeightedFileVector &WNI, const WeightedFile &WF) {<br>
> +  StringRef Filename = WF.Filename;<br>
> +  uint64_t Weight = WF.Weight;<br>
> +  llvm::sys::fs::file_status Status;<br>
> +  llvm::sys::fs::status(Filename, Status);<br>
> +  if (!llvm::sys::fs::exists(Status))<br>
> +    exitWithErrorCode(make_error_code(errc::no_such_file_or_directory),<br>
> +                      Filename);<br>
> +  // If it's a source file, collect it.<br>
> +  if (llvm::sys::fs::is_regular_file(Status)) {<br>
> +    WNI.emplace_back(Filename, Weight);<br>
> +    return;<br>
> +  }<br>
> +<br>
> +  if (llvm::sys::fs::is_directory(Status)) {<br>
> +    std::error_code EC;<br>
> +    for (llvm::sys::fs::recursive_directory_iterator F(Filename, EC), E;<br>
> +         F != E && !EC; F.increment(EC)) {<br>
> +      if (llvm::sys::fs::is_regular_file(F->path())) {<br>
> +        addWeightedInput(WNI, {F->path(), Weight});<br>
> +      }<br>
> +    }<br>
> +    if (EC)<br>
> +      exitWithErrorCode(EC, Filename);<br>
> +  }<br>
> +}<br>
> +<br>
> static void parseInputFilenamesFile(MemoryBuffer *Buffer,<br>
>                                     WeightedFileVector &WFV) {<br>
>   if (!Buffer)<br>
> @@ -339,9 +362,9 @@ static void parseInputFilenamesFile(Memo<br>
>       continue;<br>
>     // If there's no comma, it's an unweighted profile.<br>
>     else if (SanitizedEntry.find(',') == StringRef::npos)<br>
> -      WFV.emplace_back(SanitizedEntry, 1);<br>
> +      addWeightedInput(WFV, {SanitizedEntry, 1});<br>
>     else<br>
> -      WFV.emplace_back(parseWeightedFile(SanitizedEntry));<br>
> +      addWeightedInput(WFV, parseWeightedFile(SanitizedEntry));<br>
>   }<br>
> }<br>
><br>
> @@ -387,9 +410,9 @@ static int merge_main(int argc, const ch<br>
><br>
>   WeightedFileVector WeightedInputs;<br>
>   for (StringRef Filename : InputFilenames)<br>
> -    WeightedInputs.emplace_back(Filename, 1);<br>
> +    addWeightedInput(WeightedInputs, {Filename, 1});<br>
>   for (StringRef WeightedFilename : WeightedInputFilenames)<br>
> -    WeightedInputs.emplace_back(parseWeightedFile(WeightedFilename));<br>
> +    addWeightedInput(WeightedInputs, parseWeightedFile(WeightedFilename));<br>
><br>
>   // Make sure that the file buffer stays alive for the duration of the<br>
>   // weighted input vector's lifetime.<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.<br>
<br>
</blockquote></div><br></div>