1d593190132244b0194d480ec3e55f94f369c8863Eli Friedman// RUN: %clang_cc1 -fsyntax-only -verify %s 2d593190132244b0194d480ec3e55f94f369c8863Eli Friedman// PR9615 3d593190132244b0194d480ec3e55f94f369c8863Eli Friedman 4d593190132244b0194d480ec3e55f94f369c8863Eli Friedmanstruct Resource { 5d593190132244b0194d480ec3e55f94f369c8863Eli Friedman void doit(); 6d593190132244b0194d480ec3e55f94f369c8863Eli Friedman}; 7d593190132244b0194d480ec3e55f94f369c8863Eli Friedman 8d593190132244b0194d480ec3e55f94f369c8863Eli Friedmantemplate<int x> struct Lock { 9d593190132244b0194d480ec3e55f94f369c8863Eli Friedman ~Lock() { int a[x]; } // expected-error {{declared as an array with a negative size}} 10d593190132244b0194d480ec3e55f94f369c8863Eli Friedman Resource* operator->() { return 0; } 11d593190132244b0194d480ec3e55f94f369c8863Eli Friedman}; 12d593190132244b0194d480ec3e55f94f369c8863Eli Friedman 13d593190132244b0194d480ec3e55f94f369c8863Eli Friedmanstruct Accessor { 14d593190132244b0194d480ec3e55f94f369c8863Eli Friedman Lock<-1> operator->(); 15d593190132244b0194d480ec3e55f94f369c8863Eli Friedman}; 16d593190132244b0194d480ec3e55f94f369c8863Eli Friedman 17d593190132244b0194d480ec3e55f94f369c8863Eli Friedman// Make sure we try to instantiate the destructor for Lock here 18d593190132244b0194d480ec3e55f94f369c8863Eli Friedmanvoid f() { Accessor acc; acc->doit(); } // expected-note {{requested here}} 19d593190132244b0194d480ec3e55f94f369c8863Eli Friedman 20