https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87611

            Bug ID: 87611
           Summary: Cannot suppress warning with #pragma GCC diagnostic
                    warning "-Wabi=12"
           Product: gcc
           Version: 8.2.1
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

struct empty { };
#pragma GCC diagnostic warning "-Wabi=12"
void f(empty, int) { }

Compiling this with -Wabi=11 warns, even though the pragma should cause
-Wabi=12 to be used, and so not warn:

wabi.cc: In function 'void f(empty, int)':
wabi.cc:3:6: warning: empty class 'empty' parameter passing ABI changes in
-fabi-version=12 (GCC 8) [-Wabi]
3 | void f(empty, int) { }
  |      ^


It's necessary to completely disable -Wabi warnings with

#pragma GCC diagnostic ignored "-Wabi"


By contrast, the following does suppress the warning about the PR c++/51322
mangling change:

#pragma GCC diagnostic warning "-Wabi=6"
template<class T> struct Ident { typedef T type; };
template<template<class...>class E,class...F> struct A{typedef E<F...> type;};
typedef A<Ident,int> B;
void f(B){}

Why doesn't it work for the first case?

Reply via email to