clang: что означает излучение? - PullRequest
2 голосов
/ 07 октября 2019

В справочнике по диагностике лягушки четыре раза используется слово emit . Следующие предупреждения используют этот термин.

Пример 1 : скомпилируйте это с помощью -Wunneeded-internal-declaration -Wunneeded-member-function:

namespace {
    int x;
    int F ();

    struct A {
        void M ();
    };
}


decltype (x)        global1;
decltype (F ())     global2;
decltype (&A::M)    global3;

Вы получитеследующие предупреждения:

warning: variable 'x' is not needed and will not be emitted
warning: function 'F' is not needed and will not be emitted
warning: member function 'M' is not needed and will not be emitted

Пример 2 : скомпилируйте это с помощью -Wweak-vtables -Wweak-template-vtables:

class Apple {
    virtual ~Apple () {}
};


template <class T>
class Pear {
    virtual void Foo () {}
};


template class Pear<void>;

Вы получите следующеепредупреждения:

warning: 'Apple' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit
warning: explicit template instantiation 'Pear<void>' will emit a vtable in every translation unit

Вопрос

Что означает излучение?

Наиболее простым объяснением будет: emitting = генерация кода сборки. Но есть некоторые открытые вопросы, если мы рассмотрим детали.

  • В примере 1, если мы не используем x, F и A::M в неоцененном контексте, предупреждения исчезают. Таким образом, предупреждение должно быть связано с неопределенным контекстом.
  • В примере 1 F и M являются только объявлениями. Компилятор никогда не генерирует ассемблерный код из объявления функции. Поэтому нет смысла предупреждать об этом.
  • Clang имеет отдельные предупреждения для случая, когда можно доказать, что переменная или функция не используются. Скомпилируйте с -Wunused ( пример ). Из переменной и функции не генерируется код сборки, и в предупреждениях не используется термин emit .
  • Предупреждения, полученные из -Wunused, сообщаются для определений а не декларации .

Я не совсем понимаю пример 2. Я приведу его здесь для полноты картины. Излучение может означать немного другое.

Может ли кто-то, может быть, участник clang дать некоторые разъяснения по этим вопросам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...