1 // RUN: %clang_cc1 -fsyntax-only -Wdangling-field -verify %s 2 3 struct X { 4 X(int); 5 }; 6 struct Y { 7 operator X*(); 8 operator X&(); 9 }; 10 11 struct S { 12 int &x, *y; // expected-note {{reference member declared here}} \ 13 // expected-note {{pointer member declared here}} 14 S(int i) 15 : x(i), // expected-warning {{binding reference member 'x' to stack allocated parameter 'i'}} 16 y(&i) {} // expected-warning {{initializing pointer member 'y' with the stack address of parameter 'i'}} 17 S(int &i) : x(i), y(&i) {} // no-warning: reference parameter 18 S(int *i) : x(*i), y(i) {} // no-warning: pointer parameter 19 }; 20 21 struct S2 { 22 const X &x; // expected-note {{reference member declared here}} 23 S2(int i) : x(i) {} // expected-warning {{binding reference member 'x' to a temporary}} 24 }; 25 26 struct S3 { 27 X &x1, *x2; 28 S3(Y y) : x1(y), x2(y) {} // no-warning: conversion operator 29 }; 30 31 template <typename T> struct S4 { 32 T x; // expected-note {{reference member declared here}} 33 S4(int i) : x(i) {} // expected-warning {{binding reference member 'x' to stack allocated parameter 'i'}} 34 }; 35 36 template struct S4<int>; // no warning from this instantiation 37 template struct S4<int&>; // expected-note {{in instantiation}} 38