diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 7dfcc78b866..08b7fbd54f8 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9346,7 +9346,8 @@ void Tokenizer::findGarbageCode() const while (prev && prev->isName()) prev = prev->previous(); if (Token::Match(prev, "%op%|%num%|%str%|%char%")) { - if (!Token::simpleMatch(tok->tokAt(-2), "operator \"\" if")) + if (!Token::simpleMatch(tok->tokAt(-2), "operator \"\" if") && + !Token::simpleMatch(tok->tokAt(-2), "extern \"C\"") ) syntaxError(tok, prev == tok->previous() ? (prev->str() + " " + tok->str()) : (prev->str() + " .. " + tok->str())); } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index a54ae343c4d..66fa588941f 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7947,6 +7947,8 @@ class TestTokenizer : public TestFixture { ASSERT_NO_THROW(tokenizeAndStringify("S s = { .x=2, .y[0]=3 };")); ASSERT_NO_THROW(tokenizeAndStringify("S s = { .ab.a=2, .ab.b=3 };")); + + ASSERT_NO_THROW(tokenizeAndStringify("extern \"C\" typedef void FUNC();")); }