]> granicus.if.org Git - clang/commitdiff
Fix ODR violations due to abuse of LLVM_YAML_IS_(FLOW_)?SEQUENCE_VECTOR
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 30 Jun 2017 20:57:39 +0000 (20:57 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 30 Jun 2017 20:57:39 +0000 (20:57 +0000)
This is a short-term fix for PR33650 aimed to get the modules build bots green again.

Remove all the places where we use the LLVM_YAML_IS_(FLOW_)?SEQUENCE_VECTOR
macros to try to locally specialize a global template for a global type. That's
not how C++ works.

Instead, we now centrally define how to format vectors of fundamental types and
of string (std::string and StringRef). We use flow formatting for the former
cases, since that's the obvious right thing to do; in the latter case, it's
less clear what the right choice is, but flow formatting is really bad for some
cases (due to very long strings), so we pick block formatting. (Many of the
cases that were using flow formatting for strings are improved by this change.)

Other than the flow -> block formatting change for some vectors of strings,
this should result in no functionality change.

Differential Revision: https://reviews.llvm.org/D34907

Corresponding LLVM change is r306878.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@306881 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/Format.cpp
lib/Tooling/Refactoring/AtomicChange.cpp
unittests/Tooling/RefactoringTest.cpp

index e6657eb26a62afbf766f562d6e5464e9c5873123..bb6781d79517a6c14ebae877ad2b2e7e86866185 100644 (file)
@@ -44,7 +44,6 @@
 
 using clang::format::FormatStyle;
 
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(std::string)
 LLVM_YAML_IS_SEQUENCE_VECTOR(clang::format::FormatStyle::IncludeCategory)
 
 namespace llvm {
index 321bbfa2866aed70f200da9d3bc8df181415ec96..79dd346acf72ff7799d6faf944cc59d40d705509 100644 (file)
@@ -12,7 +12,6 @@
 #include "llvm/Support/YAMLTraits.h"
 #include <string>
 
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(std::string)
 LLVM_YAML_IS_SEQUENCE_VECTOR(clang::tooling::AtomicChange)
 
 namespace {
index 495ac755b39d9f0f3a2dcc056440d6561ce68622..15900940c88728df7d25f881ff63fb18accff705 100644 (file)
@@ -1123,8 +1123,10 @@ TEST_F(AtomicChangeTest, AtomicChangeToYAML) {
                "Key:             'input.cpp:20'\n"
                "FilePath:        input.cpp\n"
                "Error:           ''\n"
-               "InsertedHeaders: [ a.h ]\n"
-               "RemovedHeaders:  [ b.h ]\n"
+               "InsertedHeaders: \n" // Extra whitespace here!
+               "  - a.h\n"
+               "RemovedHeaders:  \n" // Extra whitespace here!
+               "  - b.h\n"
                "Replacements:    \n" // Extra whitespace here!
                "  - FilePath:        input.cpp\n"
                "    Offset:          20\n"
@@ -1143,8 +1145,10 @@ TEST_F(AtomicChangeTest, YAMLToAtomicChange) {
                             "Key:             'input.cpp:20'\n"
                             "FilePath:        input.cpp\n"
                             "Error:           'ok'\n"
-                            "InsertedHeaders: [ a.h ]\n"
-                            "RemovedHeaders:  [ b.h ]\n"
+                            "InsertedHeaders: \n" // Extra whitespace here!
+                            "  - a.h\n"
+                            "RemovedHeaders:  \n" // Extra whitespace here!
+                            "  - b.h\n"
                             "Replacements:    \n" // Extra whitespace here!
                             "  - FilePath:        input.cpp\n"
                             "    Offset:          20\n"