diff options
author | Marina Yatsina <marina.yatsina@intel.com> | 2015-12-29 08:49:34 +0000 |
---|---|---|
committer | Marina Yatsina <marina.yatsina@intel.com> | 2015-12-29 08:49:34 +0000 |
commit | afb72f38f8bee35c64801667201ee0d5882c4834 (patch) | |
tree | f98bf5d4211ceada0eba17ca75192ea35f474bd3 /clang/lib/Sema/SemaStmtAsm.cpp | |
parent | 3661c62e4b53fc0efd383631daa27923c669e6f4 (diff) | |
download | bcm5719-llvm-afb72f38f8bee35c64801667201ee0d5882c4834.tar.gz bcm5719-llvm-afb72f38f8bee35c64801667201ee0d5882c4834.zip |
[ms inline asm] Add support for label names with '$' chars
In MS inline asm syntax a label with '$' char produces an error, while in AT&T it does not.
In AT&T inline asm syntax Clang escapes the '$' char and replaces it with "$$". Adopted same approach for MS syntax.
Differential Revision: http://reviews.llvm.org/D15795
llvm-svn: 256545
Diffstat (limited to 'clang/lib/Sema/SemaStmtAsm.cpp')
-rw-r--r-- | clang/lib/Sema/SemaStmtAsm.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index 2917c5a3603..0d6e0f8e41b 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -750,7 +750,15 @@ LabelDecl *Sema::GetOrCreateMSAsmLabel(StringRef ExternalLabelName, // Create an internal name for the label. The name should not be a valid mangled // name, and should be unique. We use a dot to make the name an invalid mangled // name. - OS << "__MSASMLABEL_." << MSAsmLabelNameCounter++ << "__" << ExternalLabelName; + OS << "__MSASMLABEL_." << MSAsmLabelNameCounter++ << "__"; + for (auto it = ExternalLabelName.begin(); it != ExternalLabelName.end(); + ++it) { + OS << *it; + if (*it == '$') { + // We escape '$' in asm strings by replacing it with "$$" + OS << '$'; + } + } Label->setMSAsmLabel(OS.str()); } if (AlwaysCreate) { |