[llvm] r344359 - Make YAML quote forward slashes.
Bob Wilson via llvm-commits
llvm-commits at lists.llvm.org
Sun Oct 14 19:03:22 PDT 2018
Swift uses an LLVM Timer with a name that includes a slash ("Type checking / Semantic analysis”). That seems like it ought to be OK, but it now causes an assertion failure in the following code in lib/Support/Timer.cpp:
void TimerGroup::printJSONValue(raw_ostream &OS, const PrintRecord &R,
const char *suffix, double Value) {
assert(yaml::needsQuotes(Name) == yaml::QuotingType::None &&
"TimerGroup name should not need quotes");
assert(yaml::needsQuotes(R.Name) == yaml::QuotingType::None &&
"Timer name should not need quotes");
constexpr auto max_digits10 = std::numeric_limits<double>::max_digits10;
OS << "\t\"time." << Name << '.' << R.Name << suffix
<< "\": " << format("%.*e", max_digits10 - 1, Value);
}
> On Oct 12, 2018, at 9:31 AM, Zachary Turner via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: zturner
> Date: Fri Oct 12 09:31:20 2018
> New Revision: 344359
>
> URL: http://llvm.org/viewvc/llvm-project?rev=344359&view=rev
> Log:
> Make YAML quote forward slashes.
>
> If you have the string /usr/bin, prior to this patch it would not
> be quoted by our YAML serializer. But a string like C:\src would
> be, due to the presence of a backslash. This makes the quoting
> rules of basically every single file path different depending on
> the path syntax (posix vs. Windows).
>
> While technically not required by the YAML specification to quote
> forward slashes, when the behavior of paths is inconsistent it
> makes it difficult to portably write FileCheck lines that will
> work with either kind of path.
>
> Differential Revision: https://reviews.llvm.org/D53169
>
> Modified:
> llvm/trunk/include/llvm/Support/YAMLTraits.h
> llvm/trunk/test/CodeGen/AArch64/arm64-spill-remarks.ll
> llvm/trunk/test/ObjectYAML/MachO/DWARF-BigEndian.yaml
> llvm/trunk/test/ObjectYAML/MachO/DWARF-LittleEndian.yaml
> llvm/trunk/test/ObjectYAML/MachO/DWARF-debug_str.yaml
> llvm/trunk/test/ObjectYAML/MachO/dylib_dylinker_command.yaml
> llvm/trunk/test/Other/size-remarks.ll
> llvm/trunk/test/Transforms/GVN/opt-remarks.ll
> llvm/trunk/test/Transforms/Inline/optimization-remarks-passed-yaml.ll
> llvm/trunk/test/Transforms/Inline/optimization-remarks-yaml.ll
> llvm/trunk/unittests/Support/YAMLIOTest.cpp
>
> Modified: llvm/trunk/include/llvm/Support/YAMLTraits.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLTraits.h?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/YAMLTraits.h (original)
> +++ llvm/trunk/include/llvm/Support/YAMLTraits.h Fri Oct 12 09:31:20 2018
> @@ -578,7 +578,6 @@ inline QuotingType needsQuotes(StringRef
> // Safe scalar characters.
> case '_':
> case '-':
> - case '/':
> case '^':
> case '.':
> case ',':
> @@ -595,6 +594,12 @@ inline QuotingType needsQuotes(StringRef
> // DEL (0x7F) are excluded from the allowed character range.
> case 0x7F:
> return QuotingType::Double;
> + // Forward slash is allowed to be unquoted, but we quote it anyway. We have
> + // many tests that use FileCheck against YAML output, and this output often
> + // contains paths. If we quote backslashes but not forward slashes then
> + // paths will come out either quoted or unquoted depending on which platform
> + // the test is run on, making FileCheck comparisons difficult.
> + case '/':
> default: {
> // C0 control block (0x0 - 0x1F) is excluded from the allowed character
> // range.
>
> Modified: llvm/trunk/test/CodeGen/AArch64/arm64-spill-remarks.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-spill-remarks.ll?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/AArch64/arm64-spill-remarks.ll (original)
> +++ llvm/trunk/test/CodeGen/AArch64/arm64-spill-remarks.ll Fri Oct 12 09:31:20 2018
> @@ -38,7 +38,7 @@
> ; YAML: --- !Missed
> ; YAML: Pass: regalloc
> ; YAML: Name: LoopSpillReload
> -; YAML: DebugLoc: { File: /tmp/kk.c, Line: 3, Column: 20 }
> +; YAML: DebugLoc: { File: '/tmp/kk.c', Line: 3, Column: 20 }
> ; YAML: Function: fpr128
> ; YAML: Hotness: 300
> ; YAML: Args:
> @@ -51,7 +51,7 @@
> ; YAML: --- !Missed
> ; YAML: Pass: regalloc
> ; YAML: Name: LoopSpillReload
> -; YAML: DebugLoc: { File: /tmp/kk.c, Line: 2, Column: 20 }
> +; YAML: DebugLoc: { File: '/tmp/kk.c', Line: 2, Column: 20 }
> ; YAML: Function: fpr128
> ; YAML: Hotness: 30000
> ; YAML: Args:
> @@ -64,7 +64,7 @@
> ; YAML: --- !Missed
> ; YAML: Pass: regalloc
> ; YAML: Name: LoopSpillReload
> -; YAML: DebugLoc: { File: /tmp/kk.c, Line: 1, Column: 20 }
> +; YAML: DebugLoc: { File: '/tmp/kk.c', Line: 1, Column: 20 }
> ; YAML: Function: fpr128
> ; YAML: Hotness: 300
> ; YAML: Args:
> @@ -79,7 +79,7 @@
> ; THRESHOLD_YAML: --- !Missed
> ; THRESHOLD_YAML: Pass: regalloc
> ; THRESHOLD_YAML: Name: LoopSpillReload
> -; THRESHOLD_YAML: DebugLoc: { File: /tmp/kk.c, Line: 2, Column: 20 }
> +; THRESHOLD_YAML: DebugLoc: { File: '/tmp/kk.c', Line: 2, Column: 20 }
> ; THRESHOLD_YAML: Function: fpr128
> ; THRESHOLD_YAML: Hotness: 30000
> ; THRESHOLD_YAML: Args:
>
> Modified: llvm/trunk/test/ObjectYAML/MachO/DWARF-BigEndian.yaml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/DWARF-BigEndian.yaml?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/ObjectYAML/MachO/DWARF-BigEndian.yaml (original)
> +++ llvm/trunk/test/ObjectYAML/MachO/DWARF-BigEndian.yaml Fri Oct 12 09:31:20 2018
> @@ -376,8 +376,8 @@ DWARF:
> #CHECK: DWARF:
> #CHECK: debug_str:
> #CHECK: - 'clang version 4.0.0 (trunk 290181) (llvm/trunk 290209)'
> -#CHECK: - ../compiler-rt/lib/builtins/absvdi2.c
> -#CHECK: - /Users/cbieneman/dev/open-source/llvm-build-rel
> +#CHECK: - '../compiler-rt/lib/builtins/absvdi2.c'
> +#CHECK: - '/Users/cbieneman/dev/open-source/llvm-build-rel'
> #CHECK: - int
> #CHECK: - di_int
> #CHECK: - long long int
>
> Modified: llvm/trunk/test/ObjectYAML/MachO/DWARF-LittleEndian.yaml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/DWARF-LittleEndian.yaml?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/ObjectYAML/MachO/DWARF-LittleEndian.yaml (original)
> +++ llvm/trunk/test/ObjectYAML/MachO/DWARF-LittleEndian.yaml Fri Oct 12 09:31:20 2018
> @@ -365,8 +365,8 @@ DWARF:
> #CHECK: DWARF:
> #CHECK: debug_str:
> #CHECK: - 'clang version 4.0.0 (trunk 290181) (llvm/trunk 290209)'
> -#CHECK: - ../compiler-rt/lib/builtins/absvdi2.c
> -#CHECK: - /Users/cbieneman/dev/open-source/llvm-build-rel
> +#CHECK: - '../compiler-rt/lib/builtins/absvdi2.c'
> +#CHECK: - '/Users/cbieneman/dev/open-source/llvm-build-rel'
> #CHECK: - int
> #CHECK: - di_int
> #CHECK: - long long int
>
> Modified: llvm/trunk/test/ObjectYAML/MachO/DWARF-debug_str.yaml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/DWARF-debug_str.yaml?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/ObjectYAML/MachO/DWARF-debug_str.yaml (original)
> +++ llvm/trunk/test/ObjectYAML/MachO/DWARF-debug_str.yaml Fri Oct 12 09:31:20 2018
> @@ -257,7 +257,7 @@ DWARF:
> #CHECK: - ''
> #CHECK: - 'clang version 4.0.0 (trunk 288677) (llvm/trunk 288676)'
> #CHECK: - hello_world.c
> -#CHECK: - /Users/cbieneman/dev/open-source/llvm-build-rel
> +#CHECK: - '/Users/cbieneman/dev/open-source/llvm-build-rel'
> #CHECK: - main
> #CHECK: - argc
> #CHECK: - argv
>
> Modified: llvm/trunk/test/ObjectYAML/MachO/dylib_dylinker_command.yaml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/dylib_dylinker_command.yaml?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/ObjectYAML/MachO/dylib_dylinker_command.yaml (original)
> +++ llvm/trunk/test/ObjectYAML/MachO/dylib_dylinker_command.yaml Fri Oct 12 09:31:20 2018
> @@ -40,7 +40,7 @@ LoadCommands:
> #CHECK: - cmd: LC_LOAD_DYLINKER
> #CHECK: cmdsize: 32
> #CHECK: name: 12
> -#CHECK: PayloadString: /usr/lib/dyld
> +#CHECK: PayloadString: '/usr/lib/dyld'
> #CHECK: ZeroPadBytes: 7
> #CHECK: - cmd: LC_LOAD_DYLIB
> #CHECK: cmdsize: 48
> @@ -58,5 +58,5 @@ LoadCommands:
> #CHECK: timestamp: 2
> #CHECK: current_version: 80349697
> #CHECK: compatibility_version: 65536
> -#CHECK: PayloadString: /usr/lib/libSystem.B.dylib
> +#CHECK: PayloadString: '/usr/lib/libSystem.B.dylib'
> #CHECK: ZeroPadBytes: 6
>
> Modified: llvm/trunk/test/Other/size-remarks.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/size-remarks.ll?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/size-remarks.ll (original)
> +++ llvm/trunk/test/Other/size-remarks.ll Fri Oct 12 09:31:20 2018
> @@ -32,7 +32,7 @@
> ; CGSCC-NEXT: Name: IRSizeChange
> ; CGSCC-NEXT: Function:
> ; CGSCC-NEXT: Args:
> -; CGSCC-NEXT: - Pass: Function Integration/Inlining
> +; CGSCC-NEXT: - Pass: 'Function Integration/Inlining'
> ; CGSCC-NEXT: - String: ': IR instruction count changed from '
> ; CGSCC-NEXT: - IRInstrsBefore: '[[ORIG]]'
> ; CGSCC-NEXT: - String: ' to '
> @@ -44,7 +44,7 @@
> ; CGSCC-NEXT: Name: FunctionIRSizeChange
> ; CGSCC-NEXT: Function:
> ; CGSCC-NEXT: Args:
> -; CGSCC-NEXT: - Pass: Function Integration/Inlining
> +; CGSCC-NEXT: - Pass: 'Function Integration/Inlining'
> ; CGSCC-NEXT: - String: ': Function: '
> ; CGSCC-NEXT: - Function: bar
> ; CGSCC-NEXT: - String: ': IR instruction count changed from '
>
> Modified: llvm/trunk/test/Transforms/GVN/opt-remarks.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/opt-remarks.ll?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/GVN/opt-remarks.ll (original)
> +++ llvm/trunk/test/Transforms/GVN/opt-remarks.ll Fri Oct 12 09:31:20 2018
> @@ -49,7 +49,7 @@
> ; YAML-NEXT: --- !Missed
> ; YAML-NEXT: Pass: gvn
> ; YAML-NEXT: Name: LoadClobbered
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 3, Column: 3 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 3, Column: 3 }
> ; YAML-NEXT: Function: may_alias
> ; YAML-NEXT: Args:
> ; YAML-NEXT: - String: 'load of type '
> @@ -57,10 +57,10 @@
> ; YAML-NEXT: - String: ' not eliminated'
> ; YAML-NEXT: - String: ' in favor of '
> ; YAML-NEXT: - OtherAccess: load
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 1, Column: 13 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 1, Column: 13 }
> ; YAML-NEXT: - String: ' because it is clobbered by '
> ; YAML-NEXT: - ClobberedBy: store
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 2, Column: 10 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 2, Column: 10 }
> ; YAML-NEXT: ...
>
> define i32 @arg(i32* %p, i32 %i) {
>
> Modified: llvm/trunk/test/Transforms/Inline/optimization-remarks-passed-yaml.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/optimization-remarks-passed-yaml.ll?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/Inline/optimization-remarks-passed-yaml.ll (original)
> +++ llvm/trunk/test/Transforms/Inline/optimization-remarks-passed-yaml.ll Fri Oct 12 09:31:20 2018
> @@ -22,15 +22,15 @@
> ; YAML: --- !Passed
> ; YAML-NEXT: Pass: inline
> ; YAML-NEXT: Name: Inlined
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 4, Column: 10 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 4, Column: 10 }
> ; YAML-NEXT: Function: bar
> ; YAML-NEXT: Hotness: 30
> ; YAML-NEXT: Args:
> ; YAML-NEXT: - Callee: foo
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 1, Column: 0 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 1, Column: 0 }
> ; YAML-NEXT: - String: ' inlined into '
> ; YAML-NEXT: - Caller: bar
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 3, Column: 0 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 3, Column: 0 }
> ; YAML-NEXT: - String: ' with '
> ; YAML-NEXT: - String: '(cost='
> ; YAML-NEXT: - Cost: '{{[0-9\-]+}}'
>
> Modified: llvm/trunk/test/Transforms/Inline/optimization-remarks-yaml.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/optimization-remarks-yaml.ll?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/Inline/optimization-remarks-yaml.ll (original)
> +++ llvm/trunk/test/Transforms/Inline/optimization-remarks-yaml.ll Fri Oct 12 09:31:20 2018
> @@ -52,27 +52,27 @@
> ; YAML: --- !Missed
> ; YAML-NEXT: Pass: inline
> ; YAML-NEXT: Name: NoDefinition
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 5, Column: 10 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 5, Column: 10 }
> ; YAML-NEXT: Function: baz
> ; YAML-NEXT: Hotness: 30
> ; YAML-NEXT: Args:
> ; YAML-NEXT: - Callee: foo
> ; YAML-NEXT: - String: ' will not be inlined into '
> ; YAML-NEXT: - Caller: baz
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 4, Column: 0 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 4, Column: 0 }
> ; YAML-NEXT: - String: ' because its definition is unavailable'
> ; YAML-NEXT: ...
> ; YAML-NEXT: --- !Missed
> ; YAML-NEXT: Pass: inline
> ; YAML-NEXT: Name: NoDefinition
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 5, Column: 18 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 5, Column: 18 }
> ; YAML-NEXT: Function: baz
> ; YAML-NEXT: Hotness: 30
> ; YAML-NEXT: Args:
> ; YAML-NEXT: - Callee: bar
> ; YAML-NEXT: - String: ' will not be inlined into '
> ; YAML-NEXT: - Caller: baz
> -; YAML-NEXT: DebugLoc: { File: /tmp/s.c, Line: 4, Column: 0 }
> +; YAML-NEXT: DebugLoc: { File: '/tmp/s.c', Line: 4, Column: 0 }
> ; YAML-NEXT: - String: ' because its definition is unavailable'
> ; YAML-NEXT: ...
>
>
> Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=344359&r1=344358&r2=344359&view=diff
> ==============================================================================
> --- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)
> +++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Fri Oct 12 09:31:20 2018
> @@ -2543,7 +2543,9 @@ TEST(YAMLIO, TestEscaped) {
> // Single quote
> TestEscaped("@abc@", "'@abc@'");
> // No quote
> - TestEscaped("abc/", "abc/");
> + TestEscaped("abc", "abc");
> + // Forward slash quoted
> + TestEscaped("abc/", "'abc/'");
> // Double quote non-printable
> TestEscaped("\01 at abc@", "\"\\x01 at abc@\"");
> // Double quote inside single quote
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list