Explorar o código

clang-format: Fix access to uninitialized memory.

With incomplete code, we aren't guaranteed to generated changes for
every token. In that case, we need to assume that even the very first
change can continue a preprocessor directive and initialize values
accordingly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@231066 91177308-0d34-0410-b5e6-96231b3b80d8
Daniel Jasper %!s(int64=10) %!d(string=hai) anos
pai
achega
ace92c4e2b
Modificáronse 2 ficheiros con 5 adicións e 0 borrados
  1. 1 0
      lib/Format/WhitespaceManager.cpp
  2. 4 0
      unittests/Format/FormatTest.cpp

+ 1 - 0
lib/Format/WhitespaceManager.cpp

@@ -232,6 +232,7 @@ void WhitespaceManager::alignEscapedNewlines() {
   unsigned MaxEndOfLine =
       Style.AlignEscapedNewlinesLeft ? 0 : Style.ColumnLimit;
   unsigned StartOfMacro = 0;
+  Changes[0].EscapedNewlineColumn = 0;
   for (unsigned i = 1, e = Changes.size(); i < e; ++i) {
     Change &C = Changes[i];
     if (C.NewlinesBefore > 0) {

+ 4 - 0
unittests/Format/FormatTest.cpp

@@ -2656,6 +2656,10 @@ TEST_F(FormatTest, MacroDefinitionsWithIncompleteCode) {
                getLLVMStyleWithColumns(28));
   verifyFormat("#d, = };");
   verifyFormat("#if \"a");
+  verifyFormat("({\n"
+               "#define b }\\\n"
+               "  a\n"
+               "a");
 
   verifyNoCrash("#if a\na(\n#else\n#endif\n{a");
   verifyNoCrash("a={0,1\n#if a\n#else\n;\n#endif\n}");