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());
// 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"
# 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 ]
# 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
# 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'
# 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
// Safe scalar characters.
case '_':
case '-':
- case '/':
case '^':
case '.':
case ',':
// 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.
; 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:
; 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:
; 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:
; 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:
#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
#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
#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
#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
#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
; 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 '
; 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 '
; 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 '
; 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) {
; 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\-]+}}'
; 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: ...
// 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