mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 16:26:46 +00:00
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 llvm-svn: 344359
This commit is contained in:
parent
9c544199cf
commit
9f169afab2
@ -58,30 +58,30 @@ TEST(DiagnosticsYamlTest, serializesDiagnostics) {
|
||||
YAML << TUD;
|
||||
|
||||
EXPECT_EQ("---\n"
|
||||
"MainSourceFile: path/to/source.cpp\n"
|
||||
"MainSourceFile: 'path/to/source.cpp'\n"
|
||||
"Diagnostics: \n"
|
||||
" - DiagnosticName: 'diagnostic#1\'\n"
|
||||
" Message: 'message #1'\n"
|
||||
" FileOffset: 55\n"
|
||||
" FilePath: path/to/source.cpp\n"
|
||||
" FilePath: 'path/to/source.cpp'\n"
|
||||
" Replacements: \n"
|
||||
" - FilePath: path/to/source.cpp\n"
|
||||
" - FilePath: 'path/to/source.cpp'\n"
|
||||
" Offset: 100\n"
|
||||
" Length: 12\n"
|
||||
" ReplacementText: 'replacement #1'\n"
|
||||
" - DiagnosticName: 'diagnostic#2'\n"
|
||||
" Message: 'message #2'\n"
|
||||
" FileOffset: 60\n"
|
||||
" FilePath: path/to/header.h\n"
|
||||
" FilePath: 'path/to/header.h'\n"
|
||||
" Replacements: \n"
|
||||
" - FilePath: path/to/header.h\n"
|
||||
" - FilePath: 'path/to/header.h'\n"
|
||||
" Offset: 62\n"
|
||||
" Length: 2\n"
|
||||
" ReplacementText: 'replacement #2'\n"
|
||||
" - DiagnosticName: 'diagnostic#3'\n"
|
||||
" Message: 'message #3'\n"
|
||||
" FileOffset: 72\n"
|
||||
" FilePath: path/to/source2.cpp\n"
|
||||
" FilePath: 'path/to/source2.cpp'\n"
|
||||
" Replacements: \n"
|
||||
"...\n",
|
||||
YamlContentStream.str());
|
||||
|
@ -33,13 +33,13 @@ TEST(ReplacementsYamlTest, serializesReplacements) {
|
||||
|
||||
// NOTE: If this test starts to fail for no obvious reason, check whitespace.
|
||||
ASSERT_STREQ("---\n"
|
||||
"MainSourceFile: /path/to/source.cpp\n"
|
||||
"MainSourceFile: '/path/to/source.cpp'\n"
|
||||
"Replacements: \n" // Extra whitespace here!
|
||||
" - FilePath: /path/to/file1.h\n"
|
||||
" - FilePath: '/path/to/file1.h'\n"
|
||||
" Offset: 232\n"
|
||||
" Length: 56\n"
|
||||
" ReplacementText: 'replacement #1'\n"
|
||||
" - FilePath: /path/to/file2.h\n"
|
||||
" - FilePath: '/path/to/file2.h'\n"
|
||||
" Offset: 301\n"
|
||||
" Length: 2\n"
|
||||
" ReplacementText: 'replacement #2'\n"
|
||||
|
@ -36,25 +36,25 @@ sections:
|
||||
# CHECK: content: [ 61, 62, 63, 00 ]
|
||||
# CHECK: merge: by-content
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __TEXT/__objc_methname
|
||||
# CHECK: section-name: '__TEXT/__objc_methname'
|
||||
# CHECK: - scope: hidden
|
||||
# CHECK: type: c-string
|
||||
# CHECK: content: [ 64, 65, 66, 00 ]
|
||||
# CHECK: merge: by-content
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __TEXT/__objc_methname
|
||||
# CHECK: section-name: '__TEXT/__objc_methname'
|
||||
# CHECK: - scope: hidden
|
||||
# CHECK: type: c-string
|
||||
# CHECK: content: [ 61, 62, 63, 00 ]
|
||||
# CHECK: merge: by-content
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __TEXT/__objc_classname
|
||||
# CHECK: section-name: '__TEXT/__objc_classname'
|
||||
# CHECK: - scope: hidden
|
||||
# CHECK: type: c-string
|
||||
# CHECK: content: [ 67, 68, 69, 00 ]
|
||||
# CHECK: merge: by-content
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __TEXT/__objc_classname
|
||||
# CHECK: section-name: '__TEXT/__objc_classname'
|
||||
# CHECK: - scope: hidden
|
||||
# CHECK: type: c-string
|
||||
# CHECK: content: [ 61, 62, 63, 00 ]
|
||||
|
@ -367,6 +367,6 @@ page-size: 0x00000000
|
||||
# CHECK: type: unknown
|
||||
# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __DATA/__custom
|
||||
# CHECK: section-name: '__DATA/__custom'
|
||||
# CHECK: dead-strip: never
|
||||
|
||||
|
@ -115,5 +115,5 @@ global-symbols:
|
||||
# CHECK: type: unknown
|
||||
# CHECK: content: [ 01, 02, 03, 04, 05, 06, 07, 08 ]
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __CUST/__custom
|
||||
# CHECK: section-name: '__CUST/__custom'
|
||||
|
||||
|
@ -8,5 +8,5 @@
|
||||
# CHECK: type: sectcreate
|
||||
# CHECK: content: [ 68, 65, 6C, 6C, 6F, 0A ]
|
||||
# CHECK: section-choice: custom-required
|
||||
# CHECK: section-name: __DATA/__data
|
||||
# CHECK: section-name: '__DATA/__data'
|
||||
# CHECK: dead-strip: never
|
||||
|
@ -578,7 +578,6 @@ inline QuotingType needsQuotes(StringRef S) {
|
||||
// Safe scalar characters.
|
||||
case '_':
|
||||
case '-':
|
||||
case '/':
|
||||
case '^':
|
||||
case '.':
|
||||
case ',':
|
||||
@ -595,6 +594,12 @@ inline QuotingType needsQuotes(StringRef S) {
|
||||
// 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.
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 '
|
||||
|
@ -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) {
|
||||
|
@ -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\-]+}}'
|
||||
|
@ -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: ...
|
||||
|
||||
|
@ -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@abc@", "\"\\x01@abc@\"");
|
||||
// Double quote inside single quote
|
||||
|
Loading…
x
Reference in New Issue
Block a user