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

            Bug ID: 85117
           Summary: ARM: Wrong Warning Emits: parameter passing for
                    argument of type 'Handle<Unknown>' changed in GCC 7.1
           Product: gcc
           Version: 7.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: manjian2006 at gmail dot com
  Target Milestone: ---

typedef enum { } Unknown;

class HandleBase {
public:
  void** m_slot;
};

template<typename T> struct HandleTypes {
    typedef T* ExternalType;
};

template<> struct HandleTypes<Unknown> {
    typedef long long ExternalType;
};

template <class T>
class Handle: public HandleBase {
public:
  typedef typename HandleTypes<T>::ExternalType ExternalType;

};

void foo(Handle<Unknown> h) {
  extern void bar(Handle<Unknown> h);
  bar(h);
}


The above code emits wrong warning like the title.
This is caused by arm_needs_doubleword_align fails to omit TYPE_DECL when
traversals the fields of a aggregate type.

Reply via email to